Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Android应用程序中从多个SQLite表获取数据_Android_Sqlite_Illegalstateexception - Fatal编程技术网

无法在Android应用程序中从多个SQLite表获取数据

无法在Android应用程序中从多个SQLite表获取数据,android,sqlite,illegalstateexception,Android,Sqlite,Illegalstateexception,在我的应用程序中,有几行代码用于从多个数据库检索数据 代码: 当应用程序按照以下代码运行时,会发生错误 testResult = testCur.getString(cur_getimportcsv.getColumnIndex("status")); LogCat中显示的错误: 09-03 15:53:36.533: W/dalvikvm(23398): threadid=1: thread exiting with uncaught exception (group=0x415abba8)

在我的应用程序中,有几行代码用于从多个数据库检索数据

代码:

当应用程序按照以下代码运行时,会发生错误

testResult = testCur.getString(cur_getimportcsv.getColumnIndex("status"));
LogCat中显示的错误:

09-03 15:53:36.533: W/dalvikvm(23398): threadid=1: thread exiting with uncaught exception (group=0x415abba8)
09-03 15:53:36.563: E/AndroidRuntime(23398): FATAL EXCEPTION: main
09-03 15:53:36.563: E/AndroidRuntime(23398): Process: com.iceapp, PID: 23398
09-03 15:53:36.563: E/AndroidRuntime(23398): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.database.CursorWindow.nativeGetString(Native Method)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.database.CursorWindow.getString(CursorWindow.java:434)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at com.iceapp.ImportCsvActivity$2.onClick(ImportCsvActivity.java:285)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.view.View.performClick(View.java:4438)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.view.View$PerformClick.run(View.java:18422)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.os.Handler.handleCallback(Handler.java:733)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.os.Handler.dispatchMessage(Handler.java:95)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.os.Looper.loop(Looper.java:136)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at android.app.ActivityThread.main(ActivityThread.java:5001)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at java.lang.reflect.Method.invokeNative(Native Method)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at java.lang.reflect.Method.invoke(Method.java:515)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-03 15:53:36.563: E/AndroidRuntime(23398):    at dalvik.system.NativeStart.main(Native Method)

我研究过stackoverflow上的其他类似问题,我发现这个问题是由于“status”列的获取失败造成的。谁能给我一些帮助吗?为什么无法成功获取“status”的值???

如果只想读取第一行,可以这样做

testCur.moveToFirst();
if (!testCur.isAfterLast()) {
    testResult = testCur.getString(testCur.getColumnIndex("status"));
}
编辑: 您可以按如下方式遍历光标

testCur.moveToFirst();
while (testCur.isAfterLast() == false) 
{
    testResult = testCur.getString(testCur.getColumnIndex("status"));

    // implement your logic here       

    cur.moveToNext();
}

您正在使用不同的游标(
cur_getimportsv
)作为查找列“status”的参考。它可能存在,也可能不存在。在这种情况下,它不是:cur_getimportsv上没有“status”(状态),为该位置返回“-1”

在操作光标时,使用不同的光标几乎是不安全的。解决方法是一直使用同一个光标

testResult = testCur.getString(testCur.getColumnIndex("status"));

你应该从
testCur
中获取列索引,而不是从
cur\u getimportsv
@Selvin是的,我只想读第一行,但我会先试试bhargavg的建议Nope,在我看到你的评论之前正在编辑我的答案ok,反正ok
如果(testCur.moveToFirst()){}
testCur.moveToFirst()好得多;如果(!testCur.isAfterLast()){}
谢谢,我没有看到这个粗心的错误。
testResult = testCur.getString(testCur.getColumnIndex("status"));