したがって、私は HttpPost を実行し、ハンドラーに返される応答を待つこのコードを持っています。ハンドラー ブロックでは、ProgressDialog を表示します。このコードを使用してアクティビティを再開するまで、すべてが正常に機能しているようです
Intent intent = getIntent();
finish();
startActivity(intent);
1st Handlerのコードはこれ
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (0 < msg.what) {
} else {
if (msg.getData() != null) {
String s = msg.getData().getString(getResources().getString(R.string.BundleTextKey));
if (s!=null) {
try{
POSTMethods post_obj = new POSTMethods(messageHandleralert,context);
String sender = ValuesHolder.user;
mprogDialog = ProgressDialog.show(Tab_Activity.this, "", "creating pending request");
post_obj.createPendingRequest(sender);
}
catch(Exception e){
e.printStackTrace();
Toast.makeText(Tab_Activity.this, "Try Again", Toast.LENGTH_LONG).show();
}
}
}
}
}
};
私は createPendingRequest を介して Post 呼び出しを行い、この応答は別のハンドラーによって処理されます。
public Handler messageHandleralert = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case 5:
try{
HashMap<String, String> map = new HashMap<String, String>();
DateClass date_obj = new DateClass();
String date = date_obj.getDate();
map.put("date",date);
map.put("sender_email", sender);
mOutAdapter.insert(map, 0);
mprogDialog.dismiss();
String sData = date+" "+sender;
System.out.println(active);
showAlert showDialog = new showAlert(mOutAdapter,context,null,null);
AlertDialog.Builder alert = showDialog.createAlert("Received Payment Request", "Confirm Details of the Payee", true, false,true,sData);
alert.show();
}
catch(Exception e){
e.printStackTrace();
mprogDialog.dismiss();
Toast.makeText(Tab_Activity.this, "Error... Do it Again", Toast.LENGTH_LONG).show();
}
break;
case 6:
try{
Toast.makeText(Tab_Activity.this, "Error. Check Connection and Try Again", Toast.LENGTH_LONG).show();
mprogDialog.dismiss();
}
catch(Exception e){
e.printStackTrace();
}
break;
default:
break;
}
}
};
したがって、最初のハンドラ ブロックの ProgressDialog 行にエラーが表示されます。
mprogDialog = ProgressDialog.show(Tab_Activity.this, "", "creating pending request");
これは
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@41520070 is not valid; is your activity running?
実際、進行状況を表示しないことで、この行を取り除くことができます。しかし、2 番目の Handler ブロックの AlertDialog が必要であり、アクティビティの再起動時に同じエラーがスローされます。
入れてみました
(!isFinishing())
しかし、それはうまくいきません。私がそれを使用すると、アクティビティの再起動時にコードに到達することはありません。
この問題を回避する方法はありますか? または私は何か間違っていますか?これに関するいくつかのヘルプまたはリンクをいただければ幸いです
ログキャット:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@414f3fa8 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:646)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
at android.view.Window$LocalWindowManager.addView(Window.java:537)
at android.app.Dialog.show(Dialog.java:278)
at android.app.ProgressDialog.show(ProgressDialog.java:116)
at android.app.ProgressDialog.show(ProgressDialog.java:99)
at android.app.ProgressDialog.show(ProgressDialog.java:94)
at org.example.pay.Tab_Activity$1.handleMessage(Tab_Activity.java:159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)