AsyncTask的进度对话框-Android问题(无法添加窗口--令牌null不适用于应用程序)
我有一个错误: android.view.WindowManager$BadTokenException:无法添加 窗口-标记null不适用于应用程序 谁能告诉我哪里做错了。AsyncTask的进度对话框-Android问题(无法添加窗口--令牌null不适用于应用程序),android,Android,我有一个错误: android.view.WindowManager$BadTokenException:无法添加 窗口-标记null不适用于应用程序 谁能告诉我哪里做错了。 提前感谢因此,服务不是您必须使用observer模式的UI。您的活动必须在服务中注册一个侦听器,以便服务可以通知活动有关开始加载或完成加载等特殊事件。尝试添加以下行:if dialog=null&&dialog.isShowing{dialog.disease;}到活动中的onPause{}方法,或在开始下一个活动之前关闭
提前感谢因此,服务不是您必须使用observer模式的UI。您的活动必须在服务中注册一个侦听器,以便服务可以通知活动有关开始加载或完成加载等特殊事件。尝试添加以下行:if dialog=null&&dialog.isShowing{dialog.disease;}到活动中的onPause{}方法,或在开始下一个活动之前关闭对话框。您好,您无法访问服务类中的UI元素,因为该服务是后台进程。您可以在活动中使用AsyncTask来显示“登录进度”对话框。我以前在另一个程序中使用过AsyncTask,但在该代码中没有使用。我使用过AsyncTask,但面临相同的问题…我认为错误显示在alertdialog.show中;
public class ServiceLogin extends Service {
public static boolean startService = false;
UserHelper userHelper;
@Override
public void onCreate() {
Log.e("Service", "=============Created");
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
userHelper=new UserHelper(this);
}
startService = true;
}
@Override
public IBinder onBind(Intent intent) {
Log.e("Service", "=============onBind");
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("Service", "=============Destroy");
//startService = false;
}
@Override
public boolean onUnbind(Intent intent) {
Log.e("Service", "=============Unbind");
return super.onUnbind(intent);
}
@Override
public void onStart(Intent intent, int startId) {
System.out.println("Service is running outside method");
if (startService == true) {
System.out.println("Service is running");
SendData login= new SendData(this);
login.execute();
}
}
private class SendData extends AsyncTask<Void, Void, Void> {
String responsefromserver = null;
String loginemail=null;
String loginpassword=null;
private ProgressDialog dialog;
public SendData(ServiceLogin login) {
dialog = new ProgressDialog(login);
}
protected void onPreExecute() {
dialog.setMessage("Login, please wait...");
dialog.show();
}
protected Void doInBackground(Void... params) {
loginemail= AmrMethods.getDefaults("loginemail", ServiceLogin.this);
loginpassword=AmrMethods.getDefaults("loginpassword", ServiceLogin.this);
try {
JSONArray ja1 = new JSONArray();
JSONObject jsonarray = new JSONObject();
jsonarray.put("user_email", loginemail);
jsonarray.put("user_password", loginpassword);
ja1.put(jsonarray);
SendRequestLogin req = new SendRequestLogin();
responsefromserver = req.sendRequsetBackground("userLoginAndroid", ja1);
try {
String user_id,first_name,last_name,password,email,phone_no;
JSONObject obj = new JSONObject(responsefromserver);
System.out.println("++++++++++++++++++++"+obj);
user_id=obj.getString("user_id");
first_name=obj.getString("first_name");
last_name=obj.getString("last_name");
password=obj.getString("password");
email=obj.getString("email");
phone_no=obj.getString("phone_no");
AmrMethods.setDefaults("user_id",user_id,getApplicationContext());
userHelper.saveLocation(user_id, first_name, last_name, password, email,phone_no);
}
catch(Exception e){
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void unused) {
System.out.println(responsefromserver + "==============Response");
if (responsefromserver == null) {
Toast.makeText(getApplicationContext(), "Check your Internet Connection or something went wrong",
Toast.LENGTH_SHORT).show();
}else if(responsefromserver.equals("FAILURE")){
Toast.makeText(getApplicationContext(), "Data Not Send",
Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), "Login Success Fully",
Toast.LENGTH_SHORT).show();
//userid=responsefromserver;
//AmrMethods.setDefaults("userid",userid, ServiceLogin.this);
Intent i = new Intent(getApplicationContext(), Home.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
}