[英]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 .....");
}
還記錄了OnStart
和OnResume
。
為什么不調用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.