Überprüfen Sie, ob die Datenbank leer ist
Ich versuche zu prüfen, ob eine sqlite-Datenbank, die leer ist mit
public boolean chkDB(){
boolean chk = false;
Cursor mCursor = db.rawQuery("SELECT * FROM " + DATABASE_TABLE, null);
if (mCursor != null){
mCursor.moveToFirst();
if (mCursor.getInt(0) == 0){
chk = false;
}
}else{
chk = true;
}
return chk;
}
aber jedes mal, wenn ich rufe, dass die Methode, die ich bekommen null-Zeiger-Ausnahme
Mein Logcat zeigt diese
06-28 22:35:19.519: E/AndroidRuntime(441): at com.android.id.DBAdapter.chkDB(DBAdapter.java:82)
06-28 22:58:06.269: E/AndroidRuntime(621): FATAL EXCEPTION: main
06-28 22:58:06.269: E/AndroidRuntime(621): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.id/com.android.id.MainActivity}: java.lang.NullPointerException
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.os.Looper.loop(Looper.java:123)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 22:58:06.269: E/AndroidRuntime(621): at java.lang.reflect.Method.invokeNative(Native Method)
06-28 22:58:06.269: E/AndroidRuntime(621): at java.lang.reflect.Method.invoke(Method.java:521)
06-28 22:58:06.269: E/AndroidRuntime(621): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-28 22:58:06.269: E/AndroidRuntime(621): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-28 22:58:06.269: E/AndroidRuntime(621): at dalvik.system.NativeStart.main(Native Method)
06-28 22:58:06.269: E/AndroidRuntime(621): Caused by: java.lang.NullPointerException
06-28 22:58:06.269: E/AndroidRuntime(621): at com.android.id.DBAdapter.chkDB(DBAdapter.java:82)
06-28 22:58:06.269: E/AndroidRuntime(621): at com.android.id.MainActivity.enterDB(MainActivity.java:66)
06-28 22:58:06.269: E/AndroidRuntime(621): at com.android.id.MainActivity.onCreate(MainActivity.java:23)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-28 22:58:06.269: E/AndroidRuntime(621): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-28 22:58:06.269: E/AndroidRuntime(621): ... 11 more
- Zeigen Sie logcat und statt
mCursor != null
, können SiemCursor.getCount() > 0
- Hinzugefügt logcat
- ok, zeig mir mehr code aus
DBAdapter
- aus irgendeinem Grund ich kann nicht nach es
- die Website wird nicht lassen Sie mich
- 1) Sie nicht die überprüfung der Rückgabewert von
mCursor.moveToFirst();
- sollten Sie wirklich Sie dies tun. 2) Ihredb
Feld istnull
. Das beheben. - Sie können Ihre eigene Frage stackoverflow.com/privileges/edit
Du musst angemeldet sein, um einen Kommentar abzugeben.
mCursor.moveToFirst()
Gibt einen booleschen Wert zurück, ob es erfolgreich gefunden, ein element oder nicht. Es verwenden, um zu bewegen, um die erste Zeile in den cursor und gleichzeitig überprüfen, ob eine Zeile existiert.Sie versuchen, Zugriff auf eine Zeile der cursor-unabhängig davon, ob man existiert oder nicht.
NullPointerException
- es würde einen Fehler auslösen - eineCursorIndexOutOfBoundsException
Cursor.moveToNext
sollte den trick tun
Einrichten eine Abfrage-Methode (entweder in Ihrem ContentProvider direkt oder in einer anderen Klasse, die mit Ihrem ContentResolver mit einer Projektion für eine Spalte (ID sollte den trick tun). Dann sehen Sie, wenn Sie den cursor enthält alles, was ist oder nicht.
Habe ich diese außerhalb der ContentProvider in einer task-Klasse: