내보기에서 데이터를 새로 고치려고 할 때 내 custom simplecursoradapter 내에서 내 NullPointerException을 알아내는 작업. SimpleCursorAdapter를 사용할 때 NotifyDataSetChanged()를 사용할 수 없으므로 새 어댑터를 만들어야하고 필요한 데이터를 전달하는 데 어려움이 있습니다. .dbetch에 대한 OnClick() 내의 NullPointerException
public class DxSimpleCursorAdapter extends SimpleCursorAdapter {
Context context;
Activity activity;
DxDbAdapter dbh;
DxSimpleCursorAdapter adapter;
ListView lv;
protected String subcategory;
public DxSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, String param) {
super(context, layout, c, from, to);
this.context=context;
this.activity=(Activity) context;
subcategory = param;
}
public DxSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.context=context;
this.activity=(Activity) context;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View row = inflater.inflate(R.layout.list_detail, null);
ViewHolder holder = new ViewHolder();
holder.image = (ImageView) row.findViewById(R.id.fav);
holder.diagnosis = (TextView) row.findViewById(R.id.diagnosis);
holder.code = (TextView) row.findViewById(R.id.code);
row.setTag(holder);
return row;
}
class ViewHolder {
ImageView image;
TextView diagnosis;
TextView code;
}
class Status {
int status;
Long id;
}
@Override
public void bindView(View v, Context con, Cursor cursor) {
ViewHolder holder = (ViewHolder) v.getTag();
int favstatus = cursor.getInt(cursor.getColumnIndex(DxDbAdapter.FAV));
Status state = new Status();
if (favstatus == 1) {
holder.image.setImageResource(R.drawable.btn_star_on_normal);
state.status = 1;
}
else if (favstatus == 0) {
holder.image.setImageResource(R.drawable.btn_star_off_normal);
state.status = 0;
}
long id = cursor.getLong(cursor.getColumnIndex(DxDbAdapter.DIAG_ID));
state.id = id;
holder.image.setTag(state);
holder.diagnosis.setText(cursor.getString(cursor.getColumnIndex(DxDbAdapter.DIAG)));
holder.code.setText(cursor.getString(cursor.getColumnIndex(DxDbAdapter.DIAG_CODE)));
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Status current_state = (Status) v.getTag();
ImageView fav = (ImageView) v.findViewById(R.id.fav);
fav.setImageResource(R.drawable.ic_fav);
if (current_state.status == 1) {
Toast toast = Toast.makeText(context,"Update fav status to 1",Toast.LENGTH_SHORT);
toast.show();
}
else if (current_state.status == 0) {
Toast toast = Toast.makeText(context,"Update fav status to 0",Toast.LENGTH_SHORT);
toast.show();
}
dbh = new DxDbAdapter(context);
dbh.open();
Cursor newCursor = dbh.fetch(1, subcategory);
String[] columns = new String[] {"diagnosis", "diagcode"};
int[] to = new int[] {R.id.diagnosis, R.id.code};
adapter = new DxSimpleCursorAdapter(context, R.layout.list_detail, newCursor, columns, to);
lv.setAdapter(adapter);
}
});
String diag = cursor.getString(cursor.getColumnIndex(DxDbAdapter.DIAG));
String code = cursor.getString(cursor.getColumnIndex(DxDbAdapter.DIAG_CODE));
holder.diagnosis.setText(diag);
holder.code.setText(code);
}
문제는 하위 = getIntent() getStringExtra ("SUBCATEGORY")에있다; 및 커서 newCursor = dbh.fetch (1, subcategory); 그리고 어댑터를 사용중인 활동을 참조해야한다는 점에 유의하십시오. 나는 NullPointerException을 얻지 않도록 Activity를 참조하는 올바른 문법에 문제가 있다고 생각한다. 이 값이 어댑터를 사용하는 동안 변경되지 않습니다 때문에
어댑터 내에서 하위 변수에 할당 그래서 그런
같은 것을 할 것 분명히 당신은 당신의 어댑터의 생성자를 수정해야 추가 필드와 DxSimpleCursorAdapter를 호출하는 ListActivity는 이제 하위 범주 값을 전달하지만 여전히 Cursor newCursor = dbh.fetch (1, subcategory); **에서 NullPointerException 발생 문제가 있습니다. fetch() 메소드는 다른 활동에서 사용되기 때문에 Java에 대한 제한된 지식으로 인한 문제점을 확신 할 수 없습니다. – DeucePie
dbh는 null로 보입니다. DxDbAdapter dbh 객체를 할당하거나 생성하는 코드 어디에도 보이지 않습니다. – dymmeh
dbh = new DxDbAdapter (context)를 추가했습니다. \t dbh.open(); 내 코드에 위와 지금 내 NullPointerException lv.setAdapter (어댑터); 내려 갔다. 어떤 아이디어? dbh 객체를 올바르게 할당하고 생성합니까? – DeucePie