0

このエラーが発生しています。

09-05 16:17:27.460: E/CursorWindow(29553): Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 8 columns.
09-05 16:17:27.465: E/AndroidRuntime(29553): FATAL EXCEPTION: main
09-05 16:17:27.465: E/AndroidRuntime(29553): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nesv.landstar/com.nesv.landstar.LandstarPage}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

コードで何が間違っているのかわかりません。ここにあります:

Cursor c = null;

        try
        {
            c = landstarDB.rawQuery("SELECT * FROM DriverShipment", null);
        }catch (Exception e) {
            Log.w("Error selecting table", "Error selecting table");
        }

 if (c != null && c.moveToFirst()) {
         c.moveToFirst();
         do {
             Log.i("cctid:", c.getString(c.getColumnIndex("cctid")));
             if(c.getString(c.getColumnIndex("cctid")) == cctid)
             {
                 isRecorded = true;
                 shipmentId = c.getString(c.getColumnIndex("cctid"));
                 origin = c.getString(c.getColumnIndex("origin"));
                 destination = c.getString(c.getColumnIndex("destination"));
                 protectTime = c.getString(c.getColumnIndex("protect_time"));
                 readyTime = c.getString(c.getColumnIndex("ready_time"));
                 etat = c.getString(c.getColumnIndex("eta"));

                 if(c.getString(c.getColumnIndex("isAccepted")) == "1")
                 {
                     isAccepted = true;
                 }
             }
         }while(c.moveToNext());
        }
            c.close();

何か案は?ありがとう!

4

3 に答える 3

0

あなたは2回電話しましたc.moveToFirst();

if (c != null && c.moveToFirst()) {
         c.moveToFirst(); // Remove this one
于 2013-09-05T08:25:09.893 に答える
0

以下のようにループを変更します。

if (c.getCount > 0) {
     c.moveToFirst();
     do {
         Log.i("cctid:", c.getString(c.getColumnIndex("cctid")));
         if(c.getString(c.getColumnIndex("cctid")) == cctid)
         {
             isRecorded = true;
             shipmentId = c.getString(c.getColumnIndex("cctid"));
             origin = c.getString(c.getColumnIndex("origin"));
             destination = c.getString(c.getColumnIndex("destination"));
             protectTime = c.getString(c.getColumnIndex("protect_time"));
             readyTime = c.getString(c.getColumnIndex("ready_time"));
             etat = c.getString(c.getColumnIndex("eta"));

             if(c.getString(c.getColumnIndex("isAccepted")) == "1")
             {
                 isAccepted = true;
             }
         }
     }while(c.moveToNext());
    }
于 2013-09-05T08:40:29.740 に答える
0

column -1column がないことを示しcctid、-1 をgetColumnIndex返します。

また

c.getString(c.getColumnIndex("cctid")) == cctid

動作しないでしょう。メソッドを使用して文字列を比較しequalsます。

列が存在しない理由を確認できるように、テーブル作成クエリを投稿することをお勧めします。

于 2013-09-05T08:31:57.640 に答える