2013-09-30 26 views
0

你能幫我弄清楚爲什麼我在asynctask中調用onProgressUpdate時總是會出現空指針異常。下面是我的代碼:asyntask裏進度條的onProgressUpdate中的空指針異常

public class SyncBrand extends AsyncTask<String, String, Boolean> 
{ 

private ProgressDialog progressDialog; 

public static final int BRAND_DIALOG_DOWNLOAD_PROGRESS = 0; 

public SyncBrand(Context context, String _username, String _password, String _code,String _remarks,String _date,String _province,String _infotype, 
     String _competitor,ArrayList<String> _brands, ArrayList<String> _segments) 
{ 
    ... 
} 

protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case BRAND_DIALOG_DOWNLOAD_PROGRESS: 
     progressDialog = new ProgressDialog(mContext); 
     progressDialog.setMessage("Updating Sub Brands.."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
     return progressDialog; 
    default: 
     return null; 
    } 
    } 

@SuppressWarnings("deprecation") 
protected void onPreExecute() 
{  
    super.onPreExecute(); 
    ((Activity) mContext).showDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS); 
} 

protected Boolean doInBackground(String... arg0) 
{ 
    //int count = 0; 
    try{ 
     ... 
    String subBrandId = "", subBrandName = "", brandId = "", IsActive = ""; 
    for (int i = 0; i < newSubBrandCode.size(); i++) 
    { 
     subBrandId  = newSubBrandCode.get(i); 
     subBrandName = newBrandname.get(i); 
     brandId  = newBrandCode.get(i); 
     IsActive  = newIsActive.get(i); 

     databaseHandler.updateSubBrand(new Cons_Sync(subBrandId, subBrandName, brandId, IsActive)); 
     publishProgress("" + String.valueOf(0)); 
    } 

    databaseHandler.close(); 
    return true; 
} 

protected void onProgressUpdate(String... progress) { 
    Log.d("ANDRO_ASYNC",progress[0]); 

    progressDialog.setProgress(Integer.parseInt(progress[0])); 
} 

@SuppressWarnings("deprecation") 
protected void onPostExecute(Boolean valid) 
{ 

    ((Activity) mContext).removeDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS); 
    if(valid){ 
     ... 
    }else{ 
     ... 
    } 
} 
    } 

下面是我的logcat:

09-30 14:10:26.285: E/AndroidRuntime(19139): FATAL EXCEPTION: main 
09-30 14:10:26.285: E/AndroidRuntime(19139): java.lang.NullPointerException 
09-30 14:10:26.285: E/AndroidRuntime(19139): at com.resd.ireport.SyncBrand.onProgressUpdate(SyncBrand.java:183) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at com.red.ireport.SyncBrand.onProgressUpdate(SyncBrand.java:1) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:606) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at android.os.Looper.loop(Looper.java:132) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at android.app.ActivityThread.main(ActivityThread.java:4123) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at java.lang.reflect.Method.invokeNative(Native Method) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at java.lang.reflect.Method.invoke(Method.java:491) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
09-30 14:10:26.285: E/AndroidRuntime(19139): at dalvik.system.NativeStart.main(Native Method) 
+0

那裏有你'初始化progressDialog'? – Raghunandan

+0

是的..在onCreateDialog() – lolliloop

+0

你在哪裏調用'onCreateDialog' – Raghunandan

回答

4
在onPreExcute方法

烏爾調用

​​

嘗試調用

onCreateDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS) 

您的問題將是解決了..!

+0

耶!我現在可以看到進度條,它沒有得到空指針,但百分比沒有更新。順便說一句,謝謝! – lolliloop

0

試試這個,如果這能幫助...

publishProgress( 「」 +將String.valueOf(I));

讓我知道,如果問題仍然存在......

+0

我已經在doInBackground裏面使用了(看我上面的代碼)但沒有任何反應 – lolliloop

+0

你已經將它設置爲零而不是你想要更新的for循環值 – nitesh

+0

哦對不起..但是我已經試過了,仍然沒有更新 – lolliloop

1

呼叫

progressDialog.setMax(INT_MAX_VALUE);

在onCreateDialog

()&嘗試