2016-11-12 6 views
-1

私はKEY_TOR == place.getTor()CursorIndexOutOfBoundsException [SQLiteの]

行のための私のデータベースを検索したいここで私はメソッドを呼び出します。

DB_Place tor = db_tore.getDBPlace(place.getTor()); 

これはメソッドです:

public DB_Place getDBPlace(String name) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_DB_TORE_Eintrag, new String[] { KEY_ID, 
        KEY_PLACE_ID, KEY_NAME, KEY_LONGITUDE, KEY_LATITUDE, KEY_TOR }, KEY_TOR + "=?", 
      new String[]{name}, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    DB_Place place = new DB_Place(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5)); 

    return place; 
} 

このエラーが表示されている以外は、私にはうまく見えます。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.x.x/com.example.ahok.x.UI_MainActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

私はここで何が欠けていますか? nullの列のいくつかと関係がありますか?

+0

Cursor cursor = db.rawQuery("Select * from " + TABLE_DB_TORE_Eintrag + " where " + KEY_TOR + " = '" + name + "'", null); 
であれば 'これらの2行をマージしてみてください(!カーソル= NULL) cursor.moveToFirst(); 1'場合に '(!カーソル= NULL && cursor.moveToFirst())' –

+0

ところで、これその値が 'name'であることを既に知っているならば、' KEY_TOR'を検索する意味ですか? –

+0

@Rotwangしました。それでも同じエラーです。 – Glave

答えて

1

データベースにデータが挿入されていないようです。さらに、コードに論理的なエラーがあります。

このような機能を編集したいと思います。

public DB_Place getDBPlace(String name) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_DB_TORE_Eintrag, new String[] { KEY_ID, 
        KEY_PLACE_ID, KEY_NAME, KEY_LONGITUDE, KEY_LATITUDE, KEY_TOR }, KEY_TOR + "=?", 
        new String[]{name}, null, null, null, null); 

    DB_Place place = null; 

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

     place = new DB_Place(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5)); 
    } 

    return place; 
} 

更新

あなたは、クエリのその誤差を考えるのであれば、このような単純なクエリを実行します。

+0

私はあなたのコードを取って、少なくともアプリケーションはもはやクラッシュしません。このメソッドは、データベースが空ではないのに、実際には 'place'がnullであることを返します。私はデータベース全体を返すメソッドでチェックしました。 – Glave

+0

あなたのすべての行を 'TABLE_DB_TORE_Eintrag'に表示し、ここに投稿してください。 –

+0

私はwhere節がうまくいかないかもしれないと思っていますが、理由は分かりません。 'name'は" Tor 1 "であり、データベースをチェックインすると' KEY_TOR'が "Tor 1"のエントリが存在します – Glave

関連する問題