私がしたいのは、データベース内のエントリの 1 つに等しい文字列を設定することだけです。私がアクセスしているテーブルには、(ID 列以外に) 1 つの列があります。私はしばらくこれに苦労しており、同様の質問が寄せられていますが、この状況を機能させることができません. SQLite の他のいくつかのコマンドには慣れていますが、まだ初心者です。これが私が持っているものです。このメソッドが機能すると、葯クラスからの呼び出しが正常に機能すると確信しています。
StringCategory_Table と COLUMN_CATEGORIES の両方が文字列として定義されていることに注意してください。
私のデータベースは次のように作成されました(以下の方法を除く他のすべてで正常に機能します):
db.execSQL("CREATE TABLE " + StringCategory_Table + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_CATEGORIES + " TEXT NOT NULL);");
問題のメソッドは次のとおりです (SQLite オープン ヘルパーを使用してデータベース クラスで作成)。
public String getCategory(int catId){
Cursor mycursor = myDatabase.rawQuery("SELECT " + COLUMN_CATEGORIES + " FROM "+ StringCategory_Table +" WHERE " + _ID + " = " + catId, null);
//i no longer use this line:String strCatName = mycursor.toString();
String strCatName = mycursor.getString(mycursor.getColumnIndex(COLUMN_CATEGORIES));
return strCatName;
}
上記のコードのログキャットは次のとおりです。
09-04 20:05:47.764: E/AndroidRuntime(9232): FATAL EXCEPTION: main
09-04 20:05:47.764: E/AndroidRuntime(9232): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mypackage.namespace/com.mypackage.namespace.MyCurrentRestaurants}: java.lang.NullPointerException
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.app.ActivityThread.access$600(ActivityThread.java:123)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.os.Looper.loop(Looper.java:137)
09-04 20:05:47.764: E/AndroidRuntime(9232): at android.app.ActivityThread.main(ActivityThread.java:4424)
09-04 20:05:47.764: E/AndroidRuntime(9232): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 20:05:47.764: E/AndroidRuntime(9232): at java.lang.reflect.Method.invoke(Method.java:511)
09-04 20:05:47.764: E/AndroidRuntime(9232): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-04 20:05:47.764: E/AndroidRuntime(9232): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
この質問を削除するのではなく、問題が何であったかを説明します (コメントを掘り下げるのは面倒なので):
- 私が行っていたように、クラス文字列を SQLite エントリに割り当てることはできません。代わりに、データベースから読み取る前にデータベースを開く必要があります。データベースから読み取る前にデータベースを開く必要があるため、SQLite データベース クラスのインスタンスを作成する必要があります。
- 私はカーソルを使用しているので、何かが機能する前に moveToFirst メソッドを使用する必要があります。
今日私を助けてくれたすべての人に感謝します。私と同じように混乱している人々に誤解を広めたくないので、これらの結論が間違っている場合はお知らせください. アダム