0

你能帮我弄清楚为什么我在调用onProgressUpdatein时总是得到空指针异常asynctask。下面是我的代码:

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{
        ...
    }
}
  }

下面是我的日志:

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)
4

3 回答 3

4

在 onPreExcute 方法中你调用

((Activity) mContext).showDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS);

试着打电话

onCreateDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS)

你的问题将得到解决..!

于 2013-09-30T06:19:06.187 回答
1

称呼

progressDialog.setMax(INT_MAX_VALUE);

在 onCreateDialog() 并尝试

于 2013-09-30T08:49:02.223 回答
0

试试这个,如果这可以帮助...

发布进度("" + String.valueOf(i));

如果问题仍然存在,请告诉我...

于 2013-09-30T06:29:23.080 回答