onProgressUpdate 未被调用 android

onProgressUpdate is not being called android

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

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();
  }
}

我想在 protected void onProgressUpdate(Integer... a) { 中放置一个 builderSingle = new AlertDialog.Builder(MainActivity.this);,它有一个 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 上被调用,而不是

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

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

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

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

应该很简单

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();
    }
}

如果您不明白这段代码是什么,请告诉我。

覆盖函数而不是仅仅复制过去, 使用关键字@Override