2012-02-06 86 views
3

我不知道为什么我的光标是空的。我读了其他4-5个包含相同信息的问题,但我无法解决我的问题。我忘了什么?光标崩溃:请求索引0,大小为0

有了这个代码,我得到的消息:“光标为空”:

public void onClick(View arg0) { 
     String txt_edit_hw = edit_hw.getText().toString(); 
     ContentValues args = new ContentValues(); 
     args.put("hw", txt_edit_hw); 

     String test = "SELECT _id FROM tbl_homework where hw='"+ txt_edit_hw +"';"; 

     Cursor mCursor = db.rawQuery(test, null); 

     startManagingCursor(mCursor); 
     if (mCursor.moveToFirst()){ 

     String hw = mCursor.getString(mCursor.getColumnIndex("hw")); 


     doMessage(hw); 
     db.update("tbl_homework", args, "_id=34", null); 
     fillData(); 
     } else { 
      doMessage("Cursor is empty"); 
     } 
    } 

有了这个代码,我得到了crach ...安卓指数0请求,大小为0:

public void onClick(View arg0) { 
     String txt_edit_hw = edit_hw.getText().toString(); 
     ContentValues args = new ContentValues(); 
     args.put("hw", txt_edit_hw); 

     String test = "SELECT _id FROM tbl_homework where hw='"+ txt_edit_hw +"';"; 

     Cursor mCursor = db.rawQuery(test, null); 

     startManagingCursor(mCursor); 
     mCursor.moveToFirst(); 

     String hw = mCursor.getString(mCursor.getColumnIndex("hw")); 

     doMessage(hw); 
     db.update("tbl_homework", args, "_id=34", null); 
     fillData(); 
    } 

同样的错误是这样的:它崩溃的字符串(我评论的话)

 public void onClick(View arg0) { 
     String txt_edit_hw = edit_hw.getText().toString(); 
     txt_edit_hw.trim(); 
     ContentValues args = new ContentValues(); 
     args.put("hw", txt_edit_hw); 

     String test = "SELECT _id FROM tbl_homework where hw='"+ txt_edit_hw +"';"; 

     Cursor mCursor = db.rawQuery(test, null); 

     startManagingCursor(mCursor); 
     mCursor.moveToFirst(); 

     /**It crashes here**/String hwl = mCursor.getString(mCursor.getColumnIndex("_id")); 

     doMessage(hwl); 
     db.update("tbl_homework", args, "_id=34", null); 
     fillData(); 
    } 

02-06 12:13:49.789: I/Process(6112): Sending signal. PID: 6112 SIG: 9 
02-06 12:13:55.582: D/dalvikvm(6140): GC_EXTERNAL_ALLOC freed 37K, 49% free 2785K/5379K, external 5211K/5218K, paused 23ms 
02-06 12:13:58.785: D/AndroidRuntime(6140): Shutting down VM 
02-06 12:13:58.785: W/dalvikvm(6140): threadid=1: thread exiting with uncaught exception (group=0x40091568) 
02-06 12:13:58.796: E/AndroidRuntime(6140): FATAL EXCEPTION: main 
02-06 12:13:58.796: E/AndroidRuntime(6140): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at test.marco.notenha.homework$3.onClick(homework.java:227) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.view.View.performClick(View.java:2486) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.view.View$PerformClick.run(View.java:9130) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.os.Handler.handleCallback(Handler.java:587) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.os.Looper.loop(Looper.java:130) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at android.app.ActivityThread.main(ActivityThread.java:3703) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
02-06 12:13:58.796: E/AndroidRuntime(6140):  at dalvik.system.NativeStart.main(Native Method) 

表: 行:_id,hwdate,hw Val:“34”,“05/02/12”,“hy,xsdhagsah”

+1

你的第一个方法是好的。看起来数据库中没有任何数据与你的条件有关。所以你需要写查询为String test =“SELECT * FROM tbl_homework where hw ='”+ txt_edit_hw +“';”;再次如果你没有得到结果检查你的数据库或在edit_hw.getText()。toString()之后使用.trim()。 PS:不要使用getcount(),不需要这样做。 – 2012-02-06 10:39:49

+0

当我使用txt_edit_hw.trim()时出现同样的错误;我检查了我的数据库;)有一些条目第一个是_id = 34. – 2012-02-06 11:10:34

+0

您确定您的where语句是否正确,选择是否为空? – Ash 2012-02-06 11:29:28

回答

11

简单地说,您的Cursor没有任何价值,仍然尝试阅读从你的Cursor。因此,它始终是更好地检查cursor.getCount();

Log.d("Count",String.valueOf(cursor.getCount())); 
if(cursor.getCount() > 0){ 
// get values from cursor here 
} 
+0

getCount()方法? – 2012-02-06 10:36:42

+0

@Lalit Poptani谢谢你的回答,但我不想知道如何检查我的光标中的值。我想知道为什么没有什么... 添加了一些有问题的代码...相同的错误 – 2012-02-06 11:03:17

+0

要获得有关您的问题的确切想法,应该将Logcat输出添加到问题以及表格字段中。 – 2012-02-06 11:06:58

3

值您选择_id列,但您使用mCursor.getColumnIndex("hw")。在您的选择中没有列hw,只有_idgetColumnIndex()返回0,您会收到相应的错误。

UPD:没有必要使用getCount()。让我分享一些代码片段。首先,让我们假设我们从光标只需要第一个值:

Cursor cursor = //query here 
if (cursor.moveToFirst()) { 
    // retrieve values from the cursor 
} 

如果我们需要一个以上的值:

Cursor cursor = //query here 
while (cursor.moveToNext()) { 
    // retrieve next set of values from the cursor 
} 

光标的初始位置始终-1,这就是为什么上面的代码将工作并处理所有条目。

+0

谢谢,我确定这是正确的。但仍然有同样的错误。 我在我的问题中发布了一些代码。 – 2012-02-06 11:04:40

相关问题