0

私は過去数時間(悲しいことに)これで立ち往生しています。

アプリケーションがすべての柔軟な SQL コマンドを実行できる SQLite を使用してアプリケーションを構築しています。現在、ID 以外の列からクエリを実行する方法に行き詰まっています。

テーブルの 2 番目の列から情報を取得するための私のコードは次のようになります。

      public String nameSearch(String n) {
    String[] columns = { KEY_ID, KEY_NAME, KEY_DESCRIPTION };
    Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + "LIKE '%"+n+"%'", null, null, null, null, null);
    while(c != null){
        c.moveToFirst();
        String data = c.getString(1);
        return data;
    }
    return null;
}

onClick コマンドの私のコード。これは、コンテキストを説明する別のクラスにあります。

        case R.id.nameSearchButton:
        String n = etName.getText().toString();
        try {
            SQLControls controller = new SQLControls(this);
            controller.nameSearch(n);
            String gotName = controller.nameSearch(n).toString();
            controller.close();
            tvName.setText(gotName);
            Log.d(TAG, " got " + gotName);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, " error at " + e);
        }
        break;

多かれ少なかれ非常に単純であることはわかっていますが、私が行っていない、または見ていないことが1つあり、それが私の後ろを蹴っていると思います. 追加情報として、表示される logCat 情報は、ボタンをクリックするたびに次のようになります。

04-16 23:49:14.616: W/KeyCharacterMap(596): No keyboard for id 0
04-16 23:49:14.616: W/KeyCharacterMap(596): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
04-16 23:49:17.680: W/System.err(596): java.lang.NullPointerException
04-16 23:49:17.685: W/System.err(596):  at com.example.sqltest.SQLControls.nameSearch(SQLControls.java:175)
04-16 23:49:17.685: W/System.err(596):  at com.example.sqltest.CustomSearch.onClick(CustomSearch.java:72)
04-16 23:49:17.685: W/System.err(596):  at android.view.View.performClick(View.java:2485)
04-16 23:49:17.685: W/System.err(596):  at android.view.View$PerformClick.run(View.java:9080)
04-16 23:49:17.685: W/System.err(596):  at android.os.Handler.handleCallback(Handler.java:587)
04-16 23:49:17.685: W/System.err(596):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-16 23:49:17.685: W/System.err(596):  at android.os.Looper.loop(Looper.java:130)
04-16 23:49:17.685: W/System.err(596):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-16 23:49:17.685: W/System.err(596):  at java.lang.reflect.Method.invokeNative(Native Method)
04-16 23:49:17.685: W/System.err(596):  at java.lang.reflect.Method.invoke(Method.java:507)
04-16 23:49:17.685: W/System.err(596):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-16 23:49:17.685: W/System.err(596):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-16 23:49:17.685: W/System.err(596):  at dalvik.system.NativeStart.main(Native Method)
04-16 23:49:17.685: E/Custom Search(596):  error at java.lang.NullPointerException

どうもありがとうございました。これまで私の質問に答えてくれたすべての人は、非常に単純で些細なことであっても、非常に役に立ちました.

4

1 に答える 1

2

の前にスペースLIKEがありません。 c が null になることはありません。c.moveToFirsttrueかどうかを確認する必要があります。

Cursor c = myDatabase.query(true, DATABASE_TABLE, columns, KEY_NAME + " LIKE '%"+n+"%'", null, null, null, null, null);
if (c.moveToFirst())
{
    String data = c.getString(1);
    return data;
}
于 2013-04-17T06:57:54.823 に答える