gpt4 book ai didi

Android:ProgressDialog.show() WindowManager token ,无效

转载 作者:行者123 更新时间:2023-11-29 14:37:58 24 4
gpt4 key购买 nike

public class MainActivity extends Activity {

private static String State = "STOP";

final String address = "http://XXXX.co.uk:9994";
private ImageView Player;
private ProgressDialog progress;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);


Button Schedule;
Button Presenters;
Button Image;

Player = (ImageView) findViewById(R.id.imgStart);

if(State != "STOP"){
Player.setImageResource(R.drawable.stop);
}
else{
Player.setImageResource(R.drawable.start);
}

Schedule = (Button) findViewById(R.id.btnSchedule);
Presenters = (Button) findViewById(R.id.btnPresenters);
Image = (Button) findViewById(R.id.imgbutton);
LocalBroadcastManager.getInstance(this).registerReceiver(LoadingReceiver, new IntentFilter("loading"));
LocalBroadcastManager.getInstance(this).registerReceiver(CompletionReceiver, new IntentFilter("done"));
LocalBroadcastManager.getInstance(this).registerReceiver(ErrorReceiver, new IntentFilter("error"));



Player.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if(State != "PLAY"){
Intent intent = new Intent(MainActivity.this,
RadioPlayer.class);
intent.putExtra(RadioPlayer.START_PLAY, true);

startService(intent);
Player.setImageResource(R.drawable.stop);
State = "PLAY";
}
else{
Intent intent = new Intent(MainActivity.this,
RadioPlayer.class);
stopService(intent);
Player.setImageResource(R.drawable.start);

State = "STOP";
}
}

});

Schedule.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent scheduleListing = new Intent(MainActivity.this,
Schedule.class);
startActivity(scheduleListing);
}
});

Presenters.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent PresenterList = new Intent(MainActivity.this,
Presenters.class);
startActivity(PresenterList);
}
});

Image.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Intent ImgGet = new Intent(MainActivity.this,
OnAir.class);
startActivity(ImgGet);


}
});

}// End On Create


BroadcastReceiver LoadingReceiver = new BroadcastReceiver(){

@SuppressLint("NewApi")
@Override
public void onReceive(Context arg0, Intent arg1) {
progress = new ProgressDialog(MainActivity.this);
progress.setTitle("Loading");
progress.setMessage("Loading RadioPlymouth...");
progress.show(); //error here
Player.setImageResource(R.drawable.stop);
}
};

BroadcastReceiver CompletionReceiver = new BroadcastReceiver(){

@Override
public void onReceive(Context context, Intent intent) {
progress.dismiss();
Player.setImageResource(R.drawable.stop);

}

};

BroadcastReceiver ErrorReceiver = new BroadcastReceiver(){

@Override
public void onReceive(Context context, Intent intent) {
progress.dismiss();
State = "STOP";
Player.setImageResource(R.drawable.start);

}

};


}


06-28 14:33:14.988: E/AndroidRuntime(18960): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@41888998 is not valid; is your activity running?
06-28 14:33:14.988: E/AndroidRuntime(18960): at android.view.ViewRootImpl.setView(ViewRootImpl.java:564)
06-28 14:33:14.988: E/AndroidRuntime(18960): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:269)
06-28 14:33:14.988: E/AndroidRuntime(18960): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
06-28 14:33:14.988: E/AndroidRuntime(18960): at android.app.Dialog.show(Dialog.java:289)
06-28 14:33:14.988: E/AndroidRuntime(18960): at com.radioplymouth.RadioPlymouth.MainActivity$1.onReceive(MainActivity.java:144)

当我更改 Activity 时发生错误(示例),从 MainActivity -> 转到计划页面 -> 返回到 MainActivity。之前有人建议我需要在 onPause() 和/或 onResume() 中处理窗口 token ,但是我尝试这样做并没有成功。在不改变 Activity 的情况下,代码运行良好。如果有人能发现我遗漏的东西,那就太好了:)

最佳答案

经过大量搜索、调试和摸不着头脑,我终于找到了解决方案。

if(!isFinishing()){
progress.show();
Player.setImageResource(R.drawable.stop);
}

我用 else 和 toast 来查看条件何时为真,看起来好像正在调用封装此代码的 onReceive()多次直到条件不成立。我不完全确定这意味着什么,或者为什么会发生,但它确实有效。

关于Android:ProgressDialog.show() WindowManager token ,无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com