cursor提取数据时报错

BIN307 2011-10-17 10:07:01
请先看部分代码

public void sendSms(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
Cursor cursor=db.query(MmsDatabase.TB_NAME, null, MmsDatabase.ID+"=?",
new String[]{idMap.get(0)}, null, null, null);
Log.d("SendMmsService", "ID="+idMap.get(0));
if(cursor.getCount()==0){
Log.d("SendMmsService","cursor is null!");
return;
}
Log.d("SendMmsService","cursor Size="+cursor.getCount());
int indexNum=cursor.getColumnIndex(MmsDatabase.NUMBER);
int indexContent=cursor.getColumnIndex(MmsDatabase.MMS_CONTENT);
Log.d("SendMmsService","indexNum="+indexNum);
Log.d("SendMmsService","indexContent="+indexContent);
String smsNumber=cursor.getString(indexNum);
String smsContent=cursor.getString(indexContent);
Log.d("SendMmsService","smsNumber="+smsNumber);
Log.d("SendMmsService","smsContent="+smsContent);

这是log信息:

10-17 09:56:37.420: DEBUG/SendMmsService(1034): ID=1
10-17 09:56:37.420: DEBUG/SendMmsService(1034): cursor Size=1
10-17 09:56:37.420: DEBUG/SendMmsService(1034): ColumnNames=_id
10-17 09:56:37.430: DEBUG/SendMmsService(1034): indexNum=2
10-17 09:56:37.430: DEBUG/SendMmsService(1034): indexContent=6

这是报错提示:

10-17 09:56:37.440: ERROR/AndroidRuntime(1034): java.lang.RuntimeException: Error receiving broadcast Intent { act=come.demo.sendMms flg=0x4 (has extras) } in come.demo.SendMmsService$1@44f1ff88
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.os.Handler.handleCallback(Handler.java:587)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.os.Handler.dispatchMessage(Handler.java:92)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.os.Looper.loop(Looper.java:123)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.app.ActivityThread.main(ActivityThread.java:4633)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at java.lang.reflect.Method.invokeNative(Native Method)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at java.lang.reflect.Method.invoke(Method.java:521)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at dalvik.system.NativeStart.main(Native Method)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at come.demo.SendMmsService.sendSms(SendMmsService.java:147)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at come.demo.SendMmsService$1.onReceive(SendMmsService.java:49)
10-17 09:56:37.440: ERROR/AndroidRuntime(1034): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)

请高手帮我看看,提点意见,谢谢。
...全文
309 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BIN307 2011-10-17
  • 打赏
  • 举报
回复
谢谢你们,问题解决。。
dazme886 2011-10-17
  • 打赏
  • 举报
回复
数据库越界导致!
可以试试三楼的办法
libRA_kin 2011-10-17
  • 打赏
  • 举报
回复
楼上的说法 应该正确 这种错误一般都是那样 cursor.moveToFirst()
xinlan1022 2011-10-17
  • 打赏
  • 举报
回复
取之前先执行一下cursor.moveToFirst()试试呢
rancong 2011-10-17
  • 打赏
  • 举报
回复
错误显示你获取的时候下标不对应该是0开始 你后面内容获取的是1的内容
BIN307 2011-10-17
  • 打赏
  • 举报
回复
我单步跟踪了下,运行到这步

String smsNumber=cursor.getString(indexNum);
String smsContent=cursor.getString(indexContent);

出现了报错。

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧