2012-04-03 29 views
0

当我试图从数据库中获取活动用户时,我遇到了与我的应用程序有关的问题。这是我的函数的代码。Android数据库仅限于设备上的CursorIndexOutOfBoundsException

public String getActiveChild(){ 
    Cursor cur = database.query(true, TABLE_CHILDREN, null, "status = 1", null, null, 
      null, null, null); 
    Log.v("test4e",cur.getCount()+" count"); 
    cur.moveToFirst(); 
    Log.v("test", cur.getString(cur.getColumnIndex("name"))); 
    return cur.getString(cur.getColumnIndex("name")); 
} 

这工作完全在模拟器上,但是当我测试它的设备上它给了我在logcat的这个错误。

04-03 11:51:02.362: E/AndroidRuntime(961): FATAL EXCEPTION: main 
04-03 11:51:02.362: E/AndroidRuntime(961): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.myapp/com.app.myapp.SettingsActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.os.Looper.loop(Looper.java:130) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread.main(ActivityThread.java:3835) 
04-03 11:51:02.362: E/AndroidRuntime(961): at java.lang.reflect.Method.invokeNative(Native Method) 
04-03 11:51:02.362: E/AndroidRuntime(961): at java.lang.reflect.Method.invoke(Method.java:507) 
04-03 11:51:02.362: E/AndroidRuntime(961): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
04-03 11:51:02.362: E/AndroidRuntime(961): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
04-03 11:51:02.362: E/AndroidRuntime(961): at dalvik.system.NativeStart.main(Native Method) 
04-03 11:51:02.362: E/AndroidRuntime(961): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
04-03 11:51:02.362: E/AndroidRuntime(961): at com.app.myyapp.DatabaseHelper.getActiveChild(DatabaseHelper.java:168) 
04-03 11:51:02.362: E/AndroidRuntime(961): at com.app.myyapp.SettingsActivity.init(SettingsActivity.java:61) 
04-03 11:51:02.362: E/AndroidRuntime(961): at com.app.myyapp.SettingsActivity.onCreate(SettingsActivity.java:50) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-03 11:51:02.362: E/AndroidRuntime(961): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722) 

回答

2

没有符合的数据。在尝试读取之前,您应该检查cur.moveToFirst()的返回值。

0

也许您的光标在手机上运行时不包含任何记录。尝试这样做:

public String getActiveChild(){ 
    Cursor cur = database.query(true, TABLE_CHILDREN, null, "status = 1", null, 
     null, null, null, null); 
    Log.v("test4e",cur.getCount()+" count"); 

    if(cur.moveToFirst()){ 
     Log.v("test", cur.getString(cur.getColumnIndex("name"))); 
     return cur.getString(cur.getColumnIndex("name")); 
    } 
    else 
     return null; 
} 
+0

如果结果中只有一行会怎么样? – Darko 2012-04-03 10:05:11

相关问题