[英]App Crashing on Start Up - Null pointer
我從一個恢復的應用程序中獲取此LogCat(在Activity
已經過去之后(不是每次)。它實際上是一個特定的Fragment
,所以它就是FragmentActivity
恢復的時候。
12-18 18:45:33.315: E/AndroidRuntime(7593): FATAL EXCEPTION: AsyncTask #1
12-18 18:45:33.315: E/AndroidRuntime(7593): java.lang.RuntimeException: An error occured while executing doInBackground()
12-18 18:45:33.315: E/AndroidRuntime(7593): at android.os.AsyncTask$3.done(AsyncTask.java:299)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
12-18 18:45:33.315: E/AndroidRuntime(7593): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.lang.Thread.run(Thread.java:856)
12-18 18:45:33.315: E/AndroidRuntime(7593): Caused by: java.lang.NullPointerException
12-18 18:45:33.315: E/AndroidRuntime(7593): at com.---.---.DebtDataSource.payoffDebt(DebtDataSource.java:229)
12-18 18:45:33.315: E/AndroidRuntime(7593): at com.---.---.PlannerFragment$PlannerTask.doInBackground(PlannerFragment.java:131)
12-18 18:45:33.315: E/AndroidRuntime(7593): at com.---.---.PlannerFragment$PlannerTask.doInBackground(PlannerFragment.java:1)
12-18 18:45:33.315: E/AndroidRuntime(7593): at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-18 18:45:33.315: E/AndroidRuntime(7593): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-18 18:45:33.315: E/AndroidRuntime(7593): ... 4 more
主要活動有:
@Override
protected void onDestroy() {
super.onDestroy();
datasource.close();
finish();
}
onResume()
沒有任何內容。
當Activity
一直在后台時, Fragment
調用AsyncTask
。
問題是DoInBackground
基於Log。 ( PlannerFragment
)
@Override
protected Void doInBackground(String... params) {
if (paymentTotal > allFee) {
totalMonths = datasource.payoffDebt(Double.valueOf(columnDebtTotal)); // this is line 131
finalDate = datasource.getDate(totalMonths);
allFeeLife = datasource.getLiftimeFees();
}
return null;
}
然后Nullpointer在Nullpointer嘗試從我的SQLite DB中獲取數據之后。
( DebtDataSource
類)
public int payoffDebt(Double totalDebt) {
Cursor c = null;
if (DebtPlanner.PlanType.equals("highint")) { // line 229 -- NULL CRASH!
c = database.rawQuery("SELECT * FROM debt ORDER BY CAST("
+ MySQLiteHelper.COLUMN_APR + " as integer) DESC;", null);
}
同樣,只有當Activity
在后台運行很長時間后才會崩潰(長度足以要求再次調用onActivityCreated
上面的task
)。
執行時拋出NullPointerException
: DebtPlanner.PlanType.equals("highint")
。 有兩個可能的原因:
(1) DebtPlanner
為null
,或者(2) PlanType
為null
解決方案驗證這兩個字段是否已初始化,並且在執行此行時不為空。 這應該解決問題。
對於更長的操作, LoaderManager和AsyncTaskLoader優於AsyncTask。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.