首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致错误的SimpleCursorTreeAdapter

导致错误的SimpleCursorTreeAdapter
EN

Stack Overflow用户
提问于 2013-10-14 18:34:53
回答 1查看 539关注 0票数 1

下面是我的actvity中的代码以及一个内部类,它是简单游标树适配器的子类。问题在于,当我单击子元素时,会出现一个错误。

代码语言:javascript
复制
protected void onStart() {
    super.onStart();
    SQLiteDatabase db = new ToDoDatabase(getApplicationContext())
            .getWritableDatabase();
    Cursor cursor = db.query(true, ToDoDatabase.TABLE_NAME, null, null,
            null, null, null, null, null);
    CustomCursorTreeAdapter cursorTreeAdapter = new CustomCursorTreeAdapter(
            getApplicationContext(), cursor, R.layout.group_item_layout,
            new String[] { ToDoDatabase.TASK_NAME_FORMAT_DATE },
            new int[] { R.id.groupItem }, R.layout.child_item_layout,
            new String[] { ToDoDatabase.TASK_TIME },
            new int[] { R.id.childItem });
    drawerList.setAdapter(cursorTreeAdapter);
}

public class CustomCursorTreeAdapter extends SimpleCursorTreeAdapter {

    public CustomCursorTreeAdapter(Context context, Cursor cursor,
            int groupLayout, String[] groupFrom, int[] groupTo,
            int childLayout, String[] childFrom, int[] childTo) {
        super(context, cursor, groupLayout, groupFrom, groupTo,
                childLayout, childFrom, childTo);
    }

    @Override
    protected Cursor getChildrenCursor(Cursor group) {
        SQLiteDatabase db = new ToDoDatabase(getApplicationContext())
                .getWritableDatabase();
        return db
                .query(
                        ToDoDatabase.TABLE_NAME,
                        new String[] { ToDoDatabase.TASK_TIME },
                        ToDoDatabase.TASK_NAME_FORMAT_DATE + " = ? ",
                        new String[] { group.getString(group
                                .getColumnIndex(ToDoDatabase.TASK_NAME_FORMAT_DATE)) },
                        null, null, null, null);
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

我的logcat的输出如下。此外,我还获得了expendableList组项的相同值。如果我有tWo "A“,那么我得到了两个"A”与相同的childitems.And,我是一个安卓初学者

代码语言:javascript
复制
     10-14 23:52:11.908: E/AndroidRuntime(28080): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.database.CursorWindow.nativeGetLong(Native Method)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.database.CursorWindow.getLong(CursorWindow.java:515)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.CursorTreeAdapter$MyCursorHelper.getId(CursorTreeAdapter.java:436)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.CursorTreeAdapter.getChildId(CursorTreeAdapter.java:173)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.ExpandableListConnector.getItemId(ExpandableListConnector.java:427)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.AdapterView.getItemIdAtPosition(AdapterView.java:756)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.AdapterView.setSelectedPositionInt(AdapterView.java:1128)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.widget.AbsListView.onTouchEvent(AbsListView.java:3165)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.View.dispatchTouchEvent(View.java:5604)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2054)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1815)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2060)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1829)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2060)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1829)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2060)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1829)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2060)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1829)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1917)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1376)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.dispatchTouchEvent(ActionBarActivityDelegateICS.java:255)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1865)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.View.dispatchPointerEvent(View.java:5784)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.os.Handler.dispatchMessage(Handler.java:99)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.os.Looper.loop(Looper.java:137)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at android.app.ActivityThread.main(ActivityThread.java:4448)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at java.lang.reflect.Method.invokeNative(Native Method)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at java.lang.reflect.Method.invoke(Method.java:511)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at          com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
     10-14 23:52:11.908: E/AndroidRuntime(28080):   at dalvik.system.NativeStart.main(Native Method)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 18:43:22

正如@Selvin所说,您的getChildrenCursor()方法似乎返回无效。

请参阅有关该方法的文档。

游标必须包括一个名为"_id“的列,否则该类将无法工作。

http://developer.android.com/reference/android/widget/CursorTreeAdapter.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19366848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档