异步任务上的进度对话框

时间:2016-12-25 13:59:18

标签: java android android-asynctask progressdialog

我创建了三个类,即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

3 个答案:

答案 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();