関数が DatabaseHandler を作成し、オブジェクト内で関数を呼び出すフラグメントがあります。
final DatabaseHandler db = new DatabaseHandler(getActivity());
String teamName = db.getTeamName();
DatabaseHandler コンストラクターは次のとおりです。
Context context;
public DatabaseHandler(Context contextPassed) {
super(contextPassed, DATABASE_NAME, null, DATABASE_VERSION);
context = contextPassed;
}
db.getTeamName() 内のどこかに(別の関数を介して)私は持っています:
SQLiteDatabase db = this.getWritableDatabase();//exception here!
これは、99% の確率で問題なく動作します。しかし、アプリがしばらくの間バックグラウンドにあり、それを再開すると、NullPointerException が発生します。これが発生する前にアプリが何年もの間バックグラウンドにある必要があるため、複製するのは困難です. ガベージコレクションを考えさせられますか?プロセスはブロードキャスト インテントによって開始されます - これが関連しているかどうかは不明です。複製できないため、実際にデバッグすることはできませんが、毎朝起きてテストするとクラッシュします。一日を始めるのに良い方法ではなく、気が狂いそうです! ログキャット:
threadid=1: thread exiting with uncaught exception (group=0x400259f8)
FATAL EXCEPTION: main
java.lang.RuntimeException: Error receiving broadcast Intent { act=updateSettingsTeamName } in com.gcm.goalpocket.MainActivity$4@4634a608
at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:938)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
at com.gcm.goalpocket.DatabaseHandler.getUserID(DatabaseHandler.java:529)
at com.gcm.goalpocket.DatabaseHandler.getTeamName(DatabaseHandler.java:563)
at com.gcm.goalpocket.Settings.setTeamName(Settings.java:310)
at com.gcm.goalpocket.MainActivity$4.onReceive(MainActivity.java:257)