0

私のアプリケーションでは、連絡先情報を格納する FTS4 データベースを作成しました。アプリケーションは、ユーザーが名前に基づいて連絡先を検索できるようにします。ユーザーが検索クエリを入力すると、そのクエリがデータベース内のエントリと比較され、一致したエントリがリストに表示されます。エントリのいずれかをクリックするとエラーが発生し、デバッグしてカーソルが空であることを確認しました。

問題を引き起こした可能性が最も高いデータベースクラスの一部を次に示します。

private static final String DATABASE_CREATE_FTS = 
        "CREATE VIRTUAL TABLE " + DATABASE_TABLE_FTS + " USING fts4(" +
                 COL_ID + " TEXT, " +
                 COL_NAME + " TEXT, " + 
                 COL_EMAIL + " TEXT, " +
                 COL_CELL + " TEXT, " + 
                 COL_ARRIVAL + " TEXT, " +
                 COL_DEPARTURE + " TEXT, " + 
                 COL_FLIGHT_NUMBER + " TEXT, " +
                 COL_HOTEL_ROOM_NUMBER + " TEXT, " + 
                 COL_EVENT1 + " TEXT, " +
                 COL_EVENT2 + " TEXT, " + 
                 COL_EVENT1_ROOM + " TEXT, " +
                 COL_EVENT2_ROOM + " TEXT" + ");";


public Cursor getContactMatches(String query, String[] columns) {
            String selection = COL_NAME + " MATCH ?";
            Log.d("selection", selection);
            String[] selectionArgs = new String[] {query};

            return query(selection, selectionArgs, columns);
        }

        public Cursor query(String selection, String[] selectionArgs, String[] columns) {
            DBHelper = new DbHelper(ourContext);
            open();
            SQLiteQueryBuilder build = new SQLiteQueryBuilder();
            build.setTables(DATABASE_TABLE_FTS);
            SQLiteDatabase data = DBHelper.getWritableDatabase();
            Cursor cursor = build.query(data,
                    columns, selection, selectionArgs, null, null, null);
            Log.d("cursor" , "" + cursor.getCount());
            return cursor;
        }

ここに私の検索活動があります:

private void showResults(String query) {
    db = new DatabaseTable(this);
    db.open();
    Cursor cursor = db.getContactMatches(query, DatabaseTable.COLUMNS);
    cursor.moveToFirst();
    int name = cursor.getColumnIndex(DatabaseTable.COL_NAME);
    Log.d("Name", "" + name);
    mAdapter = new SimpleCursorAdapter(this, R.layout.activity_search_results, 
            cursor, new String[] {DatabaseTable.COL_NAME}, new int[] {android.R.id.text1}, 0);
    list.setAdapter(mAdapter);
    Log.d("Cursor", "" + cursor.getCount());
    getLoaderManager().initLoader(0, null, this);
    list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent contactIntent = new Intent(view.getContext(), ContactActivity.class);
            Uri uri = Uri.withAppendedPath(SomeProvider.CONTENT_URI, String.valueOf(id));
            contactIntent.setData(uri);
            startActivity(contactIntent);
        }
    });
    db.close();
}

エラー:

02-15 19:56:22.176: D/cursor(31943): android.database.sqlite.SQLiteCursor@41cdde90
02-15 19:56:22.176: D/c(31943): 0 (amounts of rows)
02-15 19:56:22.176: D/Index(31943): 1
02-15 19:56:22.176: D/AndroidRuntime(31943): Shutting down VM
02-15 19:56:22.176: W/dalvikvm(31943): threadid=1: thread exiting with uncaught exception (group=0x40ea5438)
02-15 19:56:22.186: E/AndroidRuntime(31943): FATAL EXCEPTION: main
02-15 19:56:22.186: E/AndroidRuntime(31943): java.lang.RuntimeException: Unable to    start activity ComponentInfo

{com.example.myfirstapp/com.example.myfirstapp.ContactActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
4

0 に答える 0