异步任务的进度对话框
Posted
技术标签:
【中文标题】异步任务的进度对话框【英文标题】:Progress Dialog on Async Task 【发布时间】:2017-05-10 08:33:25 【问题描述】:我创建了三个类,即 Mainactivity,它将上下文传递给服务器类,扩展至Asynctask
。有一个名为setting的类,调用server类来更新server中的数据。
传递上下文的Mainactivity代码:
Server.setActivityContext(getApplicationContext());
服务器类代码:
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();
调用此服务器类时,progressdialog
出现错误。虽然传递了上下文,但您可以建议的任何修复。
错误:
FATAL EXCEPTION: main
Process: jss.smartapp, PID: 22915 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
【问题讨论】:
发布您的 logcat 错误 在方法 setActivityContext (MainActivity.this) 中将 this 作为上下文传递 Server.setActivityContext(MainActivity.this);//传递你的活动上下文你必须传递活动上下文而不是应用程序上下文.. 【参考方案1】:不要使用静态方法。使用适当的构造函数。
public class ServerTask extends AsyncTask<Void, Void, Void>
private Context mycontext;
public ServerTask(Context c)
this.mycontext = c;
用
调用它new ServerTask(MainActivity.this).execute();
【讨论】:
【参考方案2】:您有方法 setActivityContext 并发送回活动上下文,而不是应用程序上下文
【讨论】:
【参考方案3】:你可以创建一个构造函数来传递这样的上下文
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();
并像这样调用这个服务器类
new Server(MainActivity.class).execute();
【讨论】:
以上是关于异步任务的进度对话框的主要内容,如果未能解决你的问题,请参考以下文章