Android SQLite错误请求错误
我正在尝试将短消息从sqlite数据库导入短消息收件箱。数据库位于SD卡上。我收到一个错误的请求。Sql语句的结构正确。我不确定是什么错误。请帮我找出错误所在 Main活动片段: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;
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"));