4

我一遍又一遍地寻找这个问题的答案,但你是我唯一的机会。事情是这样的:

我有一个 DBAdapter 类,MakeListActivity 和 SeeListActivity。

在 DBAdapter 我做了以下方法:

public Cursor commitQuery(String query)
{
    return myDataBase.rawQuery(query,null);
}

MakeListActivity 有以下方法:

String query = "INSERT INTO list('name','description') VALUES('"+name+"','"+desc+"')";
dbAdapter.commitQuery(query);

最后,SeeListActivity 有以下代码:

Cursor c = dbAdapter.commitQuery("SELECT * FROM list");
if(c!=null)
{
    c.moveToFirst();
    Log.i("cursor",c.getString(1));
}

我实际上不确定我是否正确插入了数据,但是当我想查看数据(在我的情况下使用 logcat 记录它)时,我得到“不幸的是,com.dstankovic.app 已停止。”

这也是logcat错误:


    02-26 00:31:11.762: E/AndroidRuntime(660): java.lang.IllegalStateException: Could not execute method of the activity
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:3599)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.view.View.performClick(View.java:4204)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.view.View$PerformClick.run(View.java:17355)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.os.Handler.handleCallback(Handler.java:725)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.os.Looper.loop(Looper.java:137)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.app.ActivityThread.main(ActivityThread.java:5041)
02-26 00:31:11.762: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
02-26 00:31:11.762: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:511)
02-26 00:31:11.762: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-26 00:31:11.762: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-26 00:31:11.762: E/AndroidRuntime(660):  at dalvik.system.NativeStart.main(Native Method)
02-26 00:31:11.762: E/AndroidRuntime(660): Caused by: java.lang.reflect.InvocationTargetException
02-26 00:31:11.762: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
02-26 00:31:11.762: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:511)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:3594)
02-26 00:31:11.762: E/AndroidRuntime(660):  ... 11 more
02-26 00:31:11.762: E/AndroidRuntime(660): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
02-26 00:31:11.762: E/AndroidRuntime(660):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
02-26 00:31:11.762: E/AndroidRuntime(660):  at com.dulerock.eatwell.MakeNewListActivity.SaveList(MakeNewListActivity.java:278)

有人可以给我一个提示吗?提前致谢

4

2 回答 2

1

你假设因为你有一个 Cursor 你有元素:

Cursor c = dbAdapter.commitQuery("SELECT * FROM list");
if(c!=null)
{
    c.moveToFirst();
    Log.i("cursor",c.getString(1));
}

尝试先检查是否c.moveToFirst()返回 true。

于 2013-02-26T00:08:09.940 回答
1

这里游标不为空但它没有数据...您需要确保游标中有数据

moveToFirst()如果游标中有数据则返回真,如果为空则返回假

试试这个

Cursor c = dbAdapter.commitQuery("SELECT * FROM list");
if(c.moveToFirst())
{
   Log.i("cursor",c.getString(1));
}
于 2013-02-26T04:11:29.023 回答