异步任务的进度对话框
Progress Dialog on Async Task
我创建了三个 Classes,即 Mainactivity,它正在将上下文传递给服务器 class,扩展到 Asynctask
。有一个 class 命名设置,它调用服务器 class 来更新服务器中的数据。
用于传递上下文的 Mainactivity 代码:
Server.setActivityContext(getApplicationContext());
服务器代码 Class:
public class Server extends AsyncTask<Void, Void, Void> {
static Context mycontext;
public static void setActivityContext(Context receivingcontext) {
mycontext = receivingcontext;
}
Dialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(mycontext, "Updating ..", "Please wait......");
}
@Override
protected Void doInBackground(Void... params) {
//Background task
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
}
}
我在调用此服务器 class 时在 progressdialog
上收到错误消息。尽管传递了上下文,但您可以提出任何修复建议。
错误:
FATAL EXCEPTION: main
Process: jss.smartapp, PID: 22915 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
您有方法 setActivityContext 并发回 activity 上下文,而不是应用程序上下文
不要使用静态方法。使用适当的构造函数。
public class ServerTask extends AsyncTask<Void, Void, Void> {
private Context mycontext;
public ServerTask(Context c) {
this.mycontext = c;
}
用
调用它
new ServerTask(MainActivity.this).execute();
您可以像这样创建用于传递上下文的构造函数
public class Server extends AsyncTask<Void, Void, Void> {
private static final String TAG = "Server";
private Context mContext;
public Server(Context context){
mContext = context;
}
Dialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute:called ");
dialog = ProgressDialog.show(mContext, "Updating ..", "Please
wait......");
}
@Override
protected Void doInBackground(Void... params) {
//Background task
Log.d(TAG, "doInBackground: called");
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d(TAG, "onPostExecute: called");
dialog.dismiss();
}
}
并像这样调用此服务器 class
new Server(MainActivity.class).execute();
我创建了三个 Classes,即 Mainactivity,它正在将上下文传递给服务器 class,扩展到 Asynctask
。有一个 class 命名设置,它调用服务器 class 来更新服务器中的数据。
用于传递上下文的 Mainactivity 代码:
Server.setActivityContext(getApplicationContext());
服务器代码 Class:
public class Server extends AsyncTask<Void, Void, Void> {
static Context mycontext;
public static void setActivityContext(Context receivingcontext) {
mycontext = receivingcontext;
}
Dialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(mycontext, "Updating ..", "Please wait......");
}
@Override
protected Void doInBackground(Void... params) {
//Background task
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
}
}
我在调用此服务器 class 时在 progressdialog
上收到错误消息。尽管传递了上下文,但您可以提出任何修复建议。
错误:
FATAL EXCEPTION: main
Process: jss.smartapp, PID: 22915 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
您有方法 setActivityContext 并发回 activity 上下文,而不是应用程序上下文
不要使用静态方法。使用适当的构造函数。
public class ServerTask extends AsyncTask<Void, Void, Void> {
private Context mycontext;
public ServerTask(Context c) {
this.mycontext = c;
}
用
调用它new ServerTask(MainActivity.this).execute();
您可以像这样创建用于传递上下文的构造函数
public class Server extends AsyncTask<Void, Void, Void> {
private static final String TAG = "Server";
private Context mContext;
public Server(Context context){
mContext = context;
}
Dialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute:called ");
dialog = ProgressDialog.show(mContext, "Updating ..", "Please
wait......");
}
@Override
protected Void doInBackground(Void... params) {
//Background task
Log.d(TAG, "doInBackground: called");
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d(TAG, "onPostExecute: called");
dialog.dismiss();
}
}
并像这样调用此服务器 class
new Server(MainActivity.class).execute();