簡體   English   中英

應用程序崩潰啟動 - 空指針

[英]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 )。

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

(1) DebtPlannernull ,或者(2) PlanTypenull

解決方案驗證這兩個字段是否已初始化,並且在執行此行時不為空。 這應該解決問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM