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 .....");
}
OnStart
和 OnResume
也在记录中。
为什么没有调用 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
我在 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 .....");
}
OnStart
和 OnResume
也在记录中。
为什么没有调用 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