簡體   English   中英

onProgressUpdate沒有被稱為android

[英]onProgressUpdate is not being called android

我有這個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(); } } 

我想放一個builderSingle = new AlertDialog.Builder(MainActivity.this); protected void onProgressUpdate(Integer... a) {具有AsyncHttpClient client = new AsyncHttpClient(); 但不幸的是,根本沒有調用onProgressUpdate。 我知道這是因為日志未顯示。 除我也有的onProgressUpdate以外,所有其他log均顯示

@
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

onProgressUpdate也不會調用onPostExecute

每次從doInBackground內部(在后台線程上)調用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

暫無
暫無

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

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