を使用してデータベースから単一の行を取得しようとしていますSQLite
が、何らかの理由でプログラムがクラッシュします。ログを検索すると、次のエラーが発生します。
インデックス-1はサイズ1で要求されます
Webで解決策を検索しましたが、コードが正しいようです。そのパラメータで行を削除できるので、位置が正しいことがわかります。それはおそらく私がクエリを書く方法ですが、私はそれの何が悪いのかわかりません。誰かが私が間違っている理由を見ることができますか?クエリのコードは次のとおりです。
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + /jokes_table");
final Uri _URI = Uri.parse(MyContentProvider.CONTENT_URI + "/2");
String positions = intent.getStringExtra("position_in_db");
Cursor cur = getBaseContext().getContentResolver().query(_URI, new String[] {"Joke","Author","Date","Status"} , MyContentProvider.ID + " = " + intent.getStringExtra("position_in_db") , null , null );
私のクエリメソッド:
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String a;
switch (sUriMatcher.match(uri))
{
case COLLECTION_URI_INDICATOR:
qb.setTables(TABLE_NAME);
qb.setProjectionMap(projectionMap);
break;
case SINGLE_ITEM_URI_INDICATOR:
qb.setTables(TABLE_NAME);
qb.setProjectionMap(projectionMap);
qb.appendWhere(ID);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, null);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
そのクエリですべての行を取得しようとすると、正常に機能します。唯一の問題は、特定の行を取得できないことです。クエリを呼び出す前に、で選択を変更し?
て文字列を確認しようとしましたが、機能しません。によってカーソルからデータに到達しようとしています
cur.getString(getColumnIndex("Joke"));
プログラムを終了します。誰かが私を助けてくれますか?