2013-02-26 124 views
4

我一遍又一遍地搜索,以便找到這個問題的答案,但你是我唯一的機會。 這是事情:Android的原始查詢結果檢查

我有一個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)); 
} 

I」米實際上不知道我是否正確插入數據,但當我想看到數據(以米爲單位) y例如用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) 

能有人給我這個提示嗎? 在此先感謝

+0

開始。 – 2013-02-26 00:12:32

+0

@DušanStanković檢查我的答案.. – Pragnani 2013-02-26 04:12:06

回答

1

這裏光標不爲空,但它並沒有數據...你需要確保有光標

moveToFirst()返回true的數據,如果有遊標中的數據和虛假的,如果它是空

通過尋找其指的是您對代碼的類的堆棧跟蹤的第一行試試這個

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

正如我在上面評論中所提到的,這個c.moveToFirst()是不正確的。插入到db中是否有可能是錯誤的,即使它沒有拋出任何錯誤?謝謝 – 2013-02-26 08:48:50

+0

這意味着你的光標不包含任何數據......所以你的插入有一個問題 – Pragnani 2013-02-26 09:44:34

+0

是的,但我想弄清楚如何檢查我的插入查詢是否完成了這項工作。當我執行查詢似乎很好,不要拋出任何錯誤,但後來當我想要讀取數據,如我們所見,光標是空的... – 2013-02-26 10:05:04

1

你假設,因爲你有一個遊標必須元素:

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

嘗試檢查c.moveToFirst()返回真第一。

+0

我試過了,它顯然是空的......我怎麼能確定我正確地將數據插入表中?謝謝 – 2013-02-26 00:12:21