Ich entwickle und Android App auf 4.0.3 und habe mehrere ListActivities mit ihren eigenen CursorAdapters. Wenn ich nur einen angepassten CursorAdapter verwende, funktioniert alles gut, aber wenn ich mehr benutze, stürzt meine Anwendung ab.Verwendung mehrerer angepasster CursorAdapter
Fehler-Stack:
04-10 15:41:08.897: W/dalvikvm(2239): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-10 15:41:08.956: E/AndroidRuntime(2239): FATAL EXCEPTION: main
04-10 15:41:08.956: E/AndroidRuntime(2239): java.lang.NullPointerException
04-10 15:41:08.956: E/AndroidRuntime(2239): at com.tsystems.openconf.database.adapter.ConferenceListCursorAdapter.bindView(ConferenceListCursorAdapter.java:38)
04-10 15:41:08.956: E/AndroidRuntime(2239): at android.widget.CursorAdapter.getView(CursorAdapter.java:250)
...
Es scheint, dass Android nicht mehrere ListActivities verarbeiten kann.
Alle meine ererbten ListActivity Klassen den folgenden Code, mit Ausnahme der Cursor Klasse:
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate called");
super.onCreate(savedInstanceState);
Log.d(TAG, "create DatabaseOpenHelper");
DatabaseOpenHandler helper = new DatabaseOpenHandler(this);
Log.d(TAG, "get writeable database access");
database = helper.getWritableDatabase();
Log.d(TAG, "create Cursor for database access");
data = database.query(DatabaseConstants.TABLE_CONFERENCES, fields,
null, null, null, null, null);
Log.d(TAG, "set ConferenceListCursorAdapter");
setListAdapter(new ConferenceListCursorAdapter(this, data));
}
Meine maßgeschneiderte geerbt Cursor sieht wie folgt aus und überschreibt die Bindview und NewView Methode:
public class ConferenceListCursorAdapter extends CursorAdapter {
// logging identifier
private static final String TAG = ConferenceListCursorAdapter.class.getSimpleName();
private Cursor cursor;
private Context context;
private final LayoutInflater inflater;
public ConferenceListCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, true);
this.inflater = LayoutInflater.from(context);
this.context = context;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Log.d(TAG, "bindView of ConferenceListAdapter called");
TextView test = (TextView) view.findViewById(R.id.conference_list_id);
test.setText(Long.toString(cursor.getLong(cursor.getColumnIndex(DatabaseConstants.CONFERENCES_STARTTIMEINMILLIS))));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.conference_list_item, parent, false);
}
}
EDIT
In Zeile 38 steht geschrieben:
Es sieht so aus, als ob Android die TextView nicht finden kann und deshalb die NPE beim Einstellen des Textes wirft. Die ID des Tests TextView ist in der R-Klasse geschrieben und sollte von Android gefunden werden. Warum wirft es die NPE?
Code-Schnipsel meines Layout XML-Datei:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/conference_list_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
Was ist in Zeile 38 von ConferenceListCurosrAdapter? Ich sehe nur 32 Zeilen in dem, was Sie gepostet haben ... – Barak
Tritt dies nur auf, wenn die Aktivität neu gestartet wird? ESP-Debugging sagt mir, dass "test" wahrscheinlich null ist. – Qberticus
+1 für die Verwendung von ESP – Barak