Android 光标代码给出了错误?

Android 光标代码给出了错误?,android,Android,当我使用游标时。moveToNext();在我的代码中,当我向下滚动底部时,但当我移除游标时,应用程序强制完成活动。moveToNext();它工作正常吗 class NoteHolder { private Button b1 = null; private Button b2 = null; private Button b3 = null; NoteHolder(View row) { b1 = (Button) row.findViewById(R.id.one);

当我使用游标时。moveToNext();在我的代码中,当我向下滚动底部时,但当我移除游标时,应用程序强制完成活动。moveToNext();它工作正常吗

class NoteHolder {
private Button b1 = null;
private Button b2 = null;
private Button b3 = null;


NoteHolder(View row) {
    b1 = (Button) row.findViewById(R.id.one);
    b2 = (Button) row.findViewById(R.id.two);
    b3 = (Button) row.findViewById(R.id.three);

}

void populateFrom(Cursor c, NoteHelper helper) {
    b1.setText(helper.getNote(c));
        c.moveToNext();
    b2.setText(helper.getNote(c));
    c.moveToNext();
    b3.setText(helper.getNote(c));
}
    ERROR/AndroidRuntime(622): FATAL EXCEPTION: main
ERROR/AndroidRuntime(622): android.database.CursorIndexOutOfBoundsException: Index 16 requested, with a size of 16
ERROR/AndroidRuntime(622):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
 ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHelper.getNote(ButtonTest.java:141)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHolder.populateFrom(ButtonTest.java:105)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteAdapter.bindView(ButtonTest.java:71)
 ERROR/AndroidRuntime(622):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
ERROR/AndroidRuntime(622):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillDown(ListView.java:652)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillGap(ListView.java:623)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
ERROR/AndroidRuntime(622):     at android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(622):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(622):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(622):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invoke(Method.java:521)
 ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(622):     at dalvik.system.NativeStart.main(Native Method)
}

    ERROR/AndroidRuntime(622): FATAL EXCEPTION: main
ERROR/AndroidRuntime(622): android.database.CursorIndexOutOfBoundsException: Index 16 requested, with a size of 16
ERROR/AndroidRuntime(622):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
 ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHelper.getNote(ButtonTest.java:141)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHolder.populateFrom(ButtonTest.java:105)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteAdapter.bindView(ButtonTest.java:71)
 ERROR/AndroidRuntime(622):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
ERROR/AndroidRuntime(622):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillDown(ListView.java:652)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillGap(ListView.java:623)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
ERROR/AndroidRuntime(622):     at android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(622):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(622):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(622):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invoke(Method.java:521)
 ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(622):     at dalvik.system.NativeStart.main(Native Method)
错误是

    ERROR/AndroidRuntime(622): FATAL EXCEPTION: main
ERROR/AndroidRuntime(622): android.database.CursorIndexOutOfBoundsException: Index 16 requested, with a size of 16
ERROR/AndroidRuntime(622):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
 ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHelper.getNote(ButtonTest.java:141)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHolder.populateFrom(ButtonTest.java:105)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteAdapter.bindView(ButtonTest.java:71)
 ERROR/AndroidRuntime(622):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
ERROR/AndroidRuntime(622):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillDown(ListView.java:652)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillGap(ListView.java:623)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
ERROR/AndroidRuntime(622):     at android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(622):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(622):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(622):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invoke(Method.java:521)
 ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(622):     at dalvik.system.NativeStart.main(Native Method)

请注意,异常是在
getNote
中引发的,而不是在
populateForm
中引发的

    ERROR/AndroidRuntime(622): FATAL EXCEPTION: main
ERROR/AndroidRuntime(622): android.database.CursorIndexOutOfBoundsException: Index 16 requested, with a size of 16
ERROR/AndroidRuntime(622):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
 ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHelper.getNote(ButtonTest.java:141)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHolder.populateFrom(ButtonTest.java:105)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteAdapter.bindView(ButtonTest.java:71)
 ERROR/AndroidRuntime(622):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
ERROR/AndroidRuntime(622):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillDown(ListView.java:652)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillGap(ListView.java:623)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
ERROR/AndroidRuntime(622):     at android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(622):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(622):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(622):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invoke(Method.java:521)
 ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(622):     at dalvik.system.NativeStart.main(Native Method)

您应该检查的返回代码。如果您已经过了结果集的末尾(即没有
next
),它将返回
false
。在这种情况下,您无法从该游标访问行数据(实际上它不指向任何地方)。因此,您不应该对该游标调用
getNote
,因为它正试图从中检索数据。

当您从数据库返回游标时,您应该执行moveToFirst();在尝试从中获取数据之前。试试这个

    ERROR/AndroidRuntime(622): FATAL EXCEPTION: main
ERROR/AndroidRuntime(622): android.database.CursorIndexOutOfBoundsException: Index 16 requested, with a size of 16
ERROR/AndroidRuntime(622):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
 ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
ERROR/AndroidRuntime(622):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHelper.getNote(ButtonTest.java:141)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteHolder.populateFrom(ButtonTest.java:105)
ERROR/AndroidRuntime(622):     at com.example.buttontest.ButtonTest$NoteAdapter.bindView(ButtonTest.java:71)
 ERROR/AndroidRuntime(622):     at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
ERROR/AndroidRuntime(622):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillDown(ListView.java:652)
ERROR/AndroidRuntime(622):     at android.widget.ListView.fillGap(ListView.java:623)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
ERROR/AndroidRuntime(622):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
ERROR/AndroidRuntime(622):     at android.os.Handler.handleCallback(Handler.java:587)
ERROR/AndroidRuntime(622):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(622):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(622):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(622):     at java.lang.reflect.Method.invoke(Method.java:521)
 ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(622):     at dalvik.system.NativeStart.main(Native Method)
void populateFrom(Cursor c, NoteHelper helper) {
    if (!c.moveToFirst()) return; //if no data dont do anything
    b1.setText(helper.getNote(c));
        c.moveToNext();
    b2.setText(helper.getNote(c));
    c.moveToNext();
    b3.setText(helper.getNote(c));
}

我的数据库有12个值我使用列表视图的表格布局,但在第二行中,它再次开始显示数据库中的第二个值,并在我向下滚动时向我显示警报力完成活动…无法准确获取您的信息您能更具体地说明您的问题吗…我在表格布局中有三个按钮我的数据库有12个值,我想从数据库1设置按钮上的文本->这段代码在第一行给出前三个值,在第二行它开始用第一行的第二个值设置按钮上的文本,以此类推。。。。2->当我使用moveToNext()时;使用我的代码,当我移动到查看最下面一行时,它将显示强制完成活动,并且当我不使用moveToNext()时;然后滚动就可以了,你出现了什么错误…强制完成活动,我的应用程序退出谢谢,你的ans解决了我的滚动问题。但是我的数据库有12个值,我想设置按钮上的文本,所有行都显示数据库的前三个值作为按钮文本。我不太明白你的意思。。你想在12个按钮上设置12个文本吗?是的,我想在12个按钮上设置12个文本