Android SQLite错误请求错误

Android SQLite错误请求错误,android,sqlite,Android,Sqlite,我正在尝试将短消息从sqlite数据库导入短消息收件箱。数据库位于SD卡上。我收到一个错误的请求。Sql语句的结构正确。我不确定是什么错误。请帮我找出错误所在 Main活动片段: private void importSms() { int id = 10; while(id < 10860) { System.out.println("The id is " + id); String address = null;

我正在尝试将短消息从sqlite数据库导入短消息收件箱。数据库位于SD卡上。我收到一个错误的请求。Sql语句的结构正确。我不确定是什么错误。请帮我找出错误所在

Main活动片段:

    private void importSms() {
    int id = 10;
    while(id < 10860) {  
        System.out.println("The id is " + id);
        String address = null;
        String body = null;
        dbHelper.returnAddress(id);
        dbHelper.returnBody(id);
        ContentValues values = new ContentValues();
        values.put("address", address);
        values.put("body", body);
        getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
        Toast.makeText(getApplicationContext(),"Importing sms number" + id,Toast.LENGTH_SHORT).show();
        id = id ++;
    }


    Toast.makeText(getApplicationContext(),"Finished import",Toast.LENGTH_LONG).show();
}
错误消息:

09-18 19:09:33.466: I/System.out(2729): The id is 10
 09-18 19:09:33.466: I/System.out(2729): returnAddress has been called
 09-18 19:09:33.526: E/CursorWindow(2729): Bad request for field slot 0,1. numRows = 1, numColumns = 1
 09-18 19:09:33.526: D/AndroidRuntime(2729): Shutting down VM
 09-18 19:09:33.526: W/dalvikvm(2729): threadid=1: thread exiting with uncaught exception (group=0x40015560)
 09-18 19:09:33.526: E/AndroidRuntime(2729): FATAL EXCEPTION: main
 09-18 19:09:33.526: E/AndroidRuntime(2729): java.lang.IllegalStateException: get field slot from row 0 col 1 failed
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.database.CursorWindow.getString_native(Native Method)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.database.CursorWindow.getString(CursorWindow.java:329)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.mobile.sms.testing.DataBaseHelper.returnAddress(DataBaseHelper.java:64)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.mobile.sms.testing.MainActivity.importSms(MainActivity.java:53)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.mobile.sms.testing.MainActivity.access$0(MainActivity.java:47)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.mobile.sms.testing.MainActivity$1.onClick(MainActivity.java:41)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.view.View.performClick(View.java:2485)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.view.View$PerformClick.run(View.java:9080)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.os.Handler.handleCallback(Handler.java:587)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.os.Handler.dispatchMessage(Handler.java:92)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.os.Looper.loop(Looper.java:130)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at android.app.ActivityThread.main(ActivityThread.java:3683)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at java.lang.reflect.Method.invokeNative(Native Method)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at java.lang.reflect.Method.invoke(Method.java:507)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 09-18 19:09:33.526: E/AndroidRuntime(2729):    at dalvik.system.NativeStart.main(Native Method)
 09-18 19:09:35.676: I/Process(2729): Sending signal. PID: 2729 SIG: 9

看起来您正试图从一个不存在的列中获取字符串

我想这可能是你需要的:

String addressQuery=“选择_id,来自sms的地址,其中_id=?”;
游标ca=db.rawQuery(addressQuery,id);
ca.moveToFirst();
int addressColumn=ca.getColumnIndexOrThrow(“地址”);
字符串地址=ca.getString(addressColumn);
此代码参数化您的id,并让您知道您得到了正确的列


尽管,
IllegalStateException
让我怀疑查看您的查询时db是否可读,但您只返回了一列,并且游标中的列从0开始编号。所以使用
stringaddress=ca.getString(1)本质上是要求它从(不存在的)第二列中提取数据。。。你的身体方法也是如此

更改这些代码,我相信您的问题会得到解决

String address = ca.getString(0);
String body = cb.getString(0);
更好的做法是,按照pjco的建议,使用
getColumnIndexOrThrow
方法,就好像在光标中插入或删除其他元素一样(这样可能会更改所需数据的列id),您不必在应用程序的其余部分更改列id:

String address = ca.getString(ca.getColumnIndexOrThrow("address"));
String body = ca.getString(ca.getColumnIndexOrThrow("body"));
String address = ca.getString(ca.getColumnIndexOrThrow("address"));
String body = ca.getString(ca.getColumnIndexOrThrow("body"));