Po raz pierwszy zadaję tutaj pytanie, więc bądź łagodny, Lol.getDatabase o nazwie rekursywnie
W każdym razie. Pracowałem nad systemem Android, a moja najnowsza kompilacja działała bez zarzutu. Do wczoraj, kiedy dział IT dał mi nową stację roboczą. Ponieważ coraz to nowe stanowiska pracy, wciąż otrzymuję następujący błąd:
04-11 17:34:53.282: E/AndroidRuntime(789): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.blueharvest/com.example.blueharvest.SettingsActivity}: java.lang.IllegalStateException: getDatabase called recursively
Jeśli to nie pomaga, używam tego w urządzeniu wirtualnym, wykorzystując platformę 4.2.2 i poziom API 17.
I Naprawdę mam nadzieję, że ktoś może rzucić trochę światła na ten błąd, więc mogę przestać wyrywać mi włosy, Lol.
Jeśli potrzebna jest jakakolwiek inna informacja, proszę dać mi znać.
Dziękuję bardzo,
Brad.
EDIT: Dodano więcej z LogCat
04-11 19:25:08.668: E/AndroidRuntime(2748): FATAL EXCEPTION: main
04-11 19:25:08.668: E/AndroidRuntime(2748): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.blueharvest/com.example.blueharvest.SettingsActivity}: java.lang.IllegalStateException: getDatabase called recursively
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.os.Handler.dispatchMessage(Handler.java:99)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.os.Looper.loop(Looper.java:137)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-11 19:25:08.668: E/AndroidRuntime(2748): at java.lang.reflect.Method.invokeNative(Native Method)
04-11 19:25:08.668: E/AndroidRuntime(2748): at java.lang.reflect.Method.invoke(Method.java:511)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-11 19:25:08.668: E/AndroidRuntime(2748): at dalvik.system.NativeStart.main(Native Method)
04-11 19:25:08.668: E/AndroidRuntime(2748): Caused by: java.lang.IllegalStateException: getDatabase called recursively
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:204)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.example.blueharvest.DatabaseHandler.setDefaultLabel(DatabaseHandler.java:90)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.example.blueharvest.DatabaseHandler.onCreate(DatabaseHandler.java:82)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.example.blueharvest.DatabaseHandler.populateFields(DatabaseHandler.java:196)
04-11 19:25:08.668: E/AndroidRuntime(2748): at com.example.blueharvest.SettingsActivity.onCreate(SettingsActivity.java:45)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.Activity.performCreate(Activity.java:5104)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-11 19:25:08.668: E/AndroidRuntime(2748): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-11 19:25:08.668: E/AndroidRuntime(2748): ... 11 more
EDIT: Dodano kodu powodującego błąd. setDefaultLabel() jest winowajcą.
@Override
public void onCreate(SQLiteDatabase db) {
// Create tables
db.execSQL(CREATE_CATEGORIES_TABLE);
db.execSQL(CREATE_CHRGDATA_TABLE);
db.execSQL(CREATE_SETTINGS_TABLE);
setDefaultLabel();
}
/**
*
*/
public void setDefaultLabel() {
// create default label
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, "Default");
db.insert(TABLE_LABELS, null, values);
}
Opublikowanie błędu bez wyświetlania kodu, który go powoduje, nikomu nie pomoże. Ponadto, dodaj więcej kodu logcat, ponieważ powinna być linia "Przyczyna ...". – Squonk
Kod nie uległ zmianie, więc pomyślałem, że nie jest to istotne w tym konkretnym przypadku. Sam projekt jest dość duży i nie jest do końca pewny, skąd pochodzi ten błąd. Kompletny kod logcat został dodany do oryginalnego wpisu. Linia "Powodowane przez" stwierdza to samo, funkcja getDatabase jest wywoływana rekursywnie. Ponownie, jedyną rzeczą, która się zmieniła jest stacja robocza .. Bardzo zdezorientowana. W każdym razie, dziękuję za bardzo szybką odpowiedź. –
Ok ... Najwyraźniej spałem. Po ponownym przeczytaniu logcat zauważyłem coś, czego wcześniej nie zauważyłem. Przyznaję, że czuję się teraz całkiem głupio, żeby to opublikować. W każdym razie kod powodujący ten błąd został dodany do oryginalnego wpisu. Nadal nie wiadomo, dlaczego spowodowałoby to problem, więc dodatkowa pomoc byłaby świetna. Dzięki jeszcze raz. B. –