onProgressUpdate未被称为android

时间:2016-10-26 05:11:02

标签: java android async-onprogressupdate

我在GetAllUsers();中有onCreate,我有这个

private void GetAllUsers() {
  (new LoadingUsers(this)).execute();
} 

然后我有了这个



private class LoadingUsers extends AsyncTask < Void, Integer, String > {
  String TAG = getClass().getSimpleName();
  AlertDialog.Builder builderSingle;
  ArrayAdapter < String > arrayAdapter;@
  SuppressWarnings("unused")
  Context mContext;

  public LoadingUsers(Context context) {
    super();

    mContext = context;

  }

  protected void onPreExecute() {
    //            prgDialog.show();
    //            builderSingle = new
    Log.d(TAG + " PreExceute", "On pre Exceute......");
  }

  protected String doInBackground(Void...arg0) {

    Log.d(TAG + " DoINBackGround", "On doInBackground...");
    return null;
  }

  protected void onProgressUpdate(Integer...a) {
    super.onProgressUpdate(a);
    Log.d(TAG + " onProgressUpdate", "You are in progress update ... " + a[0]);


  }

  protected void onPostExecute(String result) {
    //            prgDialog.hide();
    Log.d(TAG + " onPostExecute", "" + result);


    MainActivity.this.pd.dismiss();
  }
}
&#13;
&#13;
&#13;

我想在builderSingle = new AlertDialog.Builder(MainActivity.this);内加protected void onProgressUpdate(Integer... a) { AsyncHttpClient client = new AsyncHttpClient();,但遗憾的是onProgressUpdate根本没有被调用。我知道这是因为日志没有显示。除log我还有

之外,所有其他onProgressUpdate都会显示
@
Override
protected void onDestroy() {
  super.onDestroy();
  Log.i(TAG, "On Destroy .....");
}

@
Override
protected void onPause() {
  super.onPause();
  Log.i(TAG, "On Pause .....");
}

@
Override
protected void onRestart() {
  super.onRestart();
  Log.i(TAG, "On Restart .....");
}

@
Override
protected void onResume() {
  super.onResume();
  Log.i(TAG, "On Resume .....");
}

@
Override
protected void onStart() {
  super.onStart();
  Log.i(TAG, "On Start .....");
}

@
Override
protected void onStop() {
  super.onStop();
  Log.i(TAG, "On Stop .....");
}

OnStartOnResume也正在记录。

为什么没有调用onProgressUpdate? 如何正确调用onProgressUpdated?

Update

onPostExecute不是

的情况下,也会调用

onProgressUpdate

4 个答案:

答案 0 :(得分:3)

每次从onProgressUpdate(在后台线程中)调用publishProgress时,都会在主线程上调用

doInBackground。如果您选择使用此工具,则为方便您使用。如果您的任务涉及某种循环,那么它主要是有用的,在这种情况下,您可以在每次迭代时调用publishProgress。如果您的任务只调用其他一些代码,并且所有处理都发生在您无法控制的地方,那么publishProgress / onProgressUpdate机制对您没有用。在这种情况下,您可能决定在开始任务之前显示不确定的进度条,然后在完成后隐藏不确定的进度条。

答案 1 :(得分:0)

您的代码可能需要以下功能:

@Override                                                          
protected void onProgressUpdate(Integer a) { 
    super.onProgressUpdate(a);
}

答案 2 :(得分:0)

应该很简单

private class LoadingUsers extends AsyncTask< Void, Integer, String > {
    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = ProgressDialog.show(getContext(), null, "Loading users...", false);
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        dialog.setProgress(values[0]);
    }

    @Override
    protected String doInBackground(Void... params) {
        // Doing something in loop
        int max = 1024;
        for (int i = 0; i < max; i++) {
            int percentageCompleted = i*100/max;
            publishProgress(percentageCompleted);
        }
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        dialog.dismiss();
    }
}

如果您不了解此代码是什么,请告诉我。

答案 3 :(得分:0)

覆盖该功能而不是仅仅复制过去, 使用关键字@Override