0

我從恢復(後Activity早已不見了(不是每次)的應用程序獲得這個logcat的它實際上是一個特定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已在後臺時,調用AsyncTask

問題是基於日誌的DoInBackground。 (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; 

} 

那麼空指針是空指針試圖從我的SQLite數據庫中抓取數據後。

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(長足以要求task上面在onActivityCreated再次調用)這僅崩潰。

+0

DebtDataSource的第229行是什麼? – panini

+0

@panini我在最後一段代碼中對它進行了評論。 – KickingLettuce

+0

「DebtPlanner」或「PlanType」爲空。請在初始化它們的地方驗證這個或後期代碼。 –

回答

2

NullPointerException執行時拋出:DebtPlanner.PlanType.equals("highint")。有兩個可能的原因:

(1)DebtPlannernull,或(2)PlanTypenull

驗證這兩個字段已被初始化,並且執行該線時不爲空。這應該解決問題。

0

LoaderManager和AsyncTaskLoader比AsyncTask優於更長的操作。