0

データベースを作成しましたが、カーソルを使用してデータベースからデータを取得したいのですが、常にこのエラーが発生します

04-19 20:02:56.747: E/AndroidRuntime(301): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
04-19 20:02:56.747: E/AndroidRuntime(301):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
04-19 20:02:56.747: E/AndroidRuntime(301):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
04-19 20:02:56.747: E/AndroidRuntime(301):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)

ここに関数のコードがあります

public double getlatitude(String[] i,int x) {
        // TODO Auto-generated method stub
        String[] columns = new String[] { KEY_SQUAREID, KEY_SQUARELATITUDE, KEY_SQUARENAME,
                KEY_SQUARELONGITUDE
                 };

    Cursor c;
      c=ourDatabase.query("squares", columns,"squarename=?",i, null, null, null);

      String latitude = null;
        if (c.moveToFirst()) {
             latitude=c.getString(0);
        }

        double latitude_double=Double.parseDouble(latitude);
        return latitude_double;
    }
4

4 に答える 4

1

これを試して

if(c.getCount() > 0) {
   c.moveToFirst();
   for(int i=0;i<c.getCount();i++) {
     //do your logic here
   }
}
于 2012-04-19T18:17:57.100 に答える
0

問題はここにあると思います:

latitude=c.getString(0);

次のように変更します。

latitude = c.getString(c.getColumnIndex("column_name"));

また、呼び出して値を返す前にカーソルを閉じることを忘れないでくださいc.close();

于 2012-04-19T18:19:41.837 に答える
0

カーソルが空であるため、例外が発生した可能性があります (一致がない可能性があります)。これを回避するには、カーソルが空かどうかを確認してください。空の場合は、アクセスしないでください。空でない場合は、最大行数を確認し、最大行数以上の行にアクセスしないようにしてください。以下のコードを参照してください。

if ( c != null && c.getCount() > 0 ) {
    if (c.moveToFirst()) {
        do {

            // do something here

        } while (c.moveToNext());
    }
    c.close();
}
于 2012-04-19T18:24:03.913 に答える
0

カーソルを扱うときはいつでも、将来の異常なクラッシュを回避したい場合は、常に null をチェックし、必ず moveToFirst() をチェックしてください。

if( c != null ){
    if( c.moveToFirst() ){
        //Do your stuff
    }
}

//After finishing always close the cursor.
c.close();
于 2012-04-19T18:32:46.510 に答える