我创建了三个类,即Mainactivity,它将上下文传递给扩展到Asynctask
的服务器类。有一个名为setting的类,它调用服务器类来更新服务器中的数据。
传递上下文的主要活动代码:
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
答案 0 :(得分:1)
不要使用静态方法。使用适当的构造函数。
i<FNR
用
调用它public class ServerTask extends AsyncTask<Void, Void, Void> {
private Context mycontext;
public ServerTask(Context c) {
this.mycontext = c;
}
答案 1 :(得分:0)
你有方法 setActivityContext 并发回活动上下文,而不是应用程序上下文
答案 2 :(得分:0)
您可以创建一个构造函数来传递像这样的上下文
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();
}
}
并像这样调用此Server类
new Server(MainActivity.class).execute();