0

私は現在、Androidアプリで最終年度のプロジェクトを行っています。ログインモジュールを作成しようとしましたが、その部分で常にエラーが発生します。

android.database.CursorIndexOutOfBoundsException: サイズ 1 でインデックス -1 が要求されました

「サイズ 1」は取得しようとしているユーザー データです。しかし、ここからどこへ行くべきかわかりません。誰でもこの問題を解決するのを手伝ってもらえますか? これが私のコードです:

    Cursor c = agentDatabase.rawQuery("SELECT COUNT(username) FROM " + DATABASE_TABLE + " WHERE " + KEY_USERNAME + " = ? AND " +KEY_PASSWORD + " = ?", new String[]{user, pass});

    String result = "";

    if(c != null && c.moveToPosition(0)){
        //if (c.moveToFirst()){

            int r = c.getCount();

            if(r == 1){
                //Cursor d = agentDatabase.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE " + KEY_USERNAME + " = '" + user + "'", new String[]{ KEY_ROWID, KEY_NAME, KEY_EMAIL, KEY_USERNAME});

                Cursor d = agentDatabase.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE " + KEY_USERNAME + " = ?", new String[]{user});

                int iRow = d.getColumnIndex(KEY_ROWID);
                int iName = d.getColumnIndex(KEY_NAME);
                int iEmail = d.getColumnIndex(KEY_EMAIL);
                int iUser = d.getColumnIndex(KEY_USERNAME);

                result = result + d.getString(iRow) + " " + d.getString(iUser) + " " + d.getString(iName) + " " + d.getString(iEmail) + "\n";

            }
        //}
    }

    return result;
}
4

1 に答える 1

1

データをフェッチする前に、カーソルを最初の行に移動する必要があります

Cursor d = agentDatabase.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE " + KEY_USERNAME + " = ?", new String[]{user});
d.moveToFirst();

これは、結果カーソルに1行しか期待できない場合に機能します。それ以外の場合は、を使用できますd.move

于 2012-05-02T13:30:57.597 に答える