私はイベント名と日付を持つデータベースを持っています。私は、イベントの日付でグループ化されたイベントを持つカーソルを使用して、expandablelistviewを作成しようとしています。ExpandableListView sqliteエラー
私の状況に関連する多くの情報が見つかりません。 SDKの例ではコンテンツプロバイダが使用されていますが、まだ読んだり実験したりしていません。既にデータベースヘルパを古い方法で設定しています。
hereという良い例だとわかりましたが、それを私の使用に適応させようとしましたが、クラッシュしていて、何が間違っているのか分かりません。
私のコード
import android.app.ExpandableListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.SimpleCursorTreeAdapter;
public class ExpandableListTestActivity extends ExpandableListActivity {
private AttendanceDB mDbHelper;
private Cursor mGroupsCursor;
private int mGroupIdColumnIndex;
private MyExpandableListAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new AttendanceDB(this);
mDbHelper.open();
fillData();
}
private void fillData() {
mGroupsCursor = mDbHelper.fetchGroup();
startManagingCursor(mGroupsCursor);
mAdapter = new MyExpandableListAdapter(mGroupsCursor,this,
android.R.layout.simple_expandable_list_item_1,
android.R.layout.simple_expandable_list_item_1,
new String[] { AttendanceDB.EVENT_DATE },
new int[] { android.R.id.text1 },
new String[] { AttendanceDB.EVENT_NAME },
new int[] { android.R.id.text1 });
setListAdapter(mAdapter);
}
public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
public MyExpandableListAdapter(Cursor cursor, Context context,
int groupLayout, int childLayout, String[] groupFrom,
int[] groupTo, String[] childrenFrom, int[] childrenTo) {
super(context, cursor, groupLayout, groupFrom, groupTo,
childLayout, childrenFrom, childrenTo);
}
@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
Cursor childCursor = mDbHelper
.fetchChildren(groupCursor.getString(groupCursor.getColumnIndex(AttendanceDB.EVENT_DATE)));
startManagingCursor(childCursor);
return childCursor;
}
}
}
私は、次を取得し、このコードを実行すると:私は私のカーソルに戻っていた列に何か問題があるのを意味するのにかかる
E/AndroidRuntime(30329): FATAL EXCEPTION: main
E/AndroidRuntime(30329): java.lang.RuntimeException: Unable to start activity ComponentInfo{cdc.workshopapps.explist/cdc.workshopapps.explist.ExpandableListTestActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it
E/AndroidRuntime(30329): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
E/AndroidRuntime(30329): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
E/AndroidRuntime(30329): at android.app.ActivityThread.access$500(ActivityThread.java:122)
E/AndroidRuntime(30329): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
E/AndroidRuntime(30329): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(30329): at android.os.Looper.loop(Looper.java:132)
E/AndroidRuntime(30329): at android.app.ActivityThread.main(ActivityThread.java:4123)
E/AndroidRuntime(30329): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(30329): at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(30329): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime(30329): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime(30329): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(30329): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it
E/AndroidRuntime(30329): at android.database.CursorWindow.getLong_native(Native Method)
E/AndroidRuntime(30329): at android.database.CursorWindow.getLong(CursorWindow.java:436)
E/AndroidRuntime(30329): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:56)
E/AndroidRuntime(30329): at android.widget.CursorTreeAdapter$MyCursorHelper.getId(CursorTreeAdapter.java:437)
E/AndroidRuntime(30329): at android.widget.CursorTreeAdapter.getGroupId(CursorTreeAdapter.java:192)
E/AndroidRuntime(30329): at android.widget.ExpandableListConnector.getItemId(ExpandableListConnector.java:421)
E/AndroidRuntime(30329): at android.widget.AdapterView.getItemIdAtPosition(AdapterView.java:744)
E/AndroidRuntime(30329): at android.widget.AdapterView.setSelectedPositionInt(AdapterView.java:1087)
E/AndroidRuntime(30329): at android.widget.ListView.setAdapter(ListView.java:458)
E/AndroidRuntime(30329): at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:469)
E/AndroidRuntime(30329): at android.app.ExpandableListActivity.setListAdapter(ExpandableListActivity.java:246)
E/AndroidRuntime(30329): at cdc.workshopapps.explist.ExpandableListTestActivity.fillData(ExpandableListTestActivity.java:36)
E/AndroidRuntime(30329): at cdc.workshopapps.explist.ExpandableListTestActivity.onCreate(ExpandableListTestActivity.java:22)
E/AndroidRuntime(30329): at android.app.Activity.performCreate(Activity.java:4397)
E/AndroidRuntime(30329): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
E/AndroidRuntime(30329): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
E/AndroidRuntime(30329): ... 11 more
。私は次のようにfilldata()メソッドを変更した場合でも、(ちょうど私のカーソル/列をチェックする):
mGroupsCursor = mDbHelper.fetchGroup();
startManagingCursor(mGroupsCursor);
mGroupsCursor.moveToFirst();
String Text1 = mGroupsCursor.getString(mGroupsCursor.getColumnIndex(AttendanceDB.EVENT_DATE));
Toast.makeText(this, Text1, Toast.LENGTH_LONG).show();
Cursor childCursor = mDbHelper
.fetchChildren(mGroupsCursor.getString(mGroupsCursor.getColumnIndex(AttendanceDB.EVENT_DATE)));
startManagingCursor(childCursor);
childCursor.moveToFirst();
String Text2 = childCursor.getString(childCursor.getColumnIndex(AttendanceDB.EVENT_NAME));
Toast.makeText(this, Text2, Toast.LENGTH_LONG).show();
乾杯出力予想されるイベントの日付とイベント名のデータを、私はとのように途方に暮れてよ私が間違ってしまった場所。
他の(おそらく)関連コード:
public Cursor fetchGroup() {
String query ="SELECT DISTINCT date FROM events";
return mDb.rawQuery(query,null);
}
public Cursor fetchChildren(String date) {
Cursor c = mDb.query(EVENT_TABLE, new String[] { EVENT_ROWID,
EVENT_NAME }, EVENT_DATE + "='" + date + "'" ,
null, null, null, null);
return c;
}
任意の助けを大幅に高く評価されるだろう。
私はそのリンクを3回読んで、必要な_idについてそのビットを見逃してしまった聖書のスタックを誓うでしょう。それは今働いている。今私はちょうどそれをフラグメントで動作させる必要があります。 :pしかし、問題にぶつかると、それは別の日の質問かもしれません。助けてくれてありがとう! – Barak