このコード行で散発的な(約30回のうち1回)NullPointerExceptionが発生しています。そして、それがどこから来たのか、そしてそれをどのように防ぐのか、私にはわかりません。
public void close() {
if (mDb!=null)
mDb.close();
}
mDbはSQliteDatabaseオブジェクトであり、Close関数はHelperクラスに実装されています。
私がしていること:AsyncTaskを使用してそのSQliteDatabaseで複雑なクエリを処理したいと思います。AsyncTaskのコードは次のとおりです。
private class processCursorTask extends AsyncTask<Integer[], Void, Dataset[]> {
private DbHelper mDb;
processCursorTask(DbHelper db) {
super();
mDb=db;
}
@Override
protected Dataset[] doInBackground(Integer... args) {
Dataset[] res=mDb.getCursorFiltered(args);
mDb.close();
return res;
}
protected void onPostExecute(Dataset[] result) {
setListView(result);
}
}
そして、私はここでこのAsyncTaskを作成しています(ListFragmentから):
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new processCursorTask(new DbHelper(this.getActivity()), mBaseDivision, mBaseValue, mSortOrder, mSortDir).execute();
}
03-26 00:44:20.489:E / SqliteDatabaseCpp(6442):sqlite3_close(0x3b2278)が失敗しました:27 03-26 00:44:20.520:W / dalvikvm(6442):threadid = 12:スレッドがキャッチされない例外で終了します(グループ= 0x40a691f8)03-26 00:44:20.520:E / AndroidRuntime(6442):致命的な例外:AsyncTask#2
03-26 00:44:20.520:E / AndroidRuntime(6442):java.lang.RuntimeException:エラーが発生しましたdoInBackground()の実行中03-26 00:44:20.520:E / AndroidRuntime(6442):android.os.AsyncTask $ 3.done(AsyncTask.java:278)
03-26 00:44:20.520:E / AndroidRuntime( 6442):java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)03-26 00:44:20.520:E / AndroidRuntime(6442):java.util.concurrent.FutureTask.setException(FutureTask .java:124)
03-26 00:44:20.520:E / AndroidRuntime(6442):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)
03-26 00:44:20.520:E / AndroidRuntime(6442) :at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-26 00:44:20.520:E / AndroidRuntime(6442):at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java: 208)
03-26 00:44:20.520:E / AndroidRuntime(6442):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)03-26 00:44:20.520:E / AndroidRuntime(6442) :at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)03-26 00:44:20.520:E / AndroidRuntime(6442):at java.lang.Thread.run(Thread.java:856 )03-26 00:44:20.520:E / AndroidRuntime(6442):原因:java.lang.NullPointerException
03-26 00:44:20.520:E / AndroidRuntime(6442):android.database.sqlite.SQLiteDatabase.closeDatabase(SQLiteDatabase.java:1156)03-26 00:44:20.520:E / AndroidRuntime(6442):at android.database.sqlite.SQLiteDatabase.close(SQLiteDatabase.java:1105)03-26 00:44:20.520:E / AndroidRuntime(6442):at de.kialelem.trainer.DbHelper.close(DbHelper.java:676)03 -26 00:44:20.520:E / AndroidRuntime(6442):de.kialelem.trainer.ViewContentDatabaseListFragment $ processCursorTask.doInBackground(ViewContentDatabaseListFragment.java:48)03-26 00:44:20.520:E / AndroidRuntime(6442): at de.kialelem.trainer.ViewContentDatabaseListFragment $ processCursorTask.doInBackground(ViewContentDatabaseListFragment.java:1)03-26 00:44:20.520:E / AndroidRuntime(6442):at android.os.AsyncTask $ 2.call(AsyncTask.java:264 )03-2600:44:20。520:E / AndroidRuntime(6442):java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)で
03-26 00:44:20.520:E / AndroidRuntime(6442):...5詳細