当前位置: 代码迷 >> Android >> android 常见异常
  详细解决方案

android 常见异常

热度:73   发布时间:2016-04-28 06:35:41.0
android 常见错误

问题1:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

?

修改一个需求的时候出现这个问题:需求需要在PreferenceScreen 里面弹出一个窗口,我写的时候发现一个问题

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity().getApplicationContext());	builder.setTitle("data romaing");	//builder.setView(new ListView(getActivity()));	builder.setMessage("choose");	builder.setPositiveButton("yes", new OnClickListener(){		@Override		public void onClick(DialogInterface dialog, int which) {			// TODO Auto-generated method stub					}			});	builder.setNegativeButton("no", new OnClickListener(){		@Override		public void onClick(DialogInterface dialog, int which) {			// TODO Auto-generated method stub					}			});	AlertDialog dialog =  builder.create();	dialog.show();

?

?

错误的原因:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity().getApplicationContext());

? ?应该改成:?

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

?

?

this.getApplicationContext()); 和 this的区别:

这里的this指的当然就是Acitivity.this , 指的是这个Acitivity的上下文,而this.getApplicationContext()指的则是整个应用的上下文。

对于AlertDialog来说,是需要依赖一个View,而View是对应于Activity的。

那么为什么会报错呢,这里涉及到一个生命周期的问题了。

对于一个应用Context来说,它的生命周期是整个应用程序的生命周期,而对于Activity来说,当它销毁之后它的生命周期就结束了。

AlertDialog是属于Acitivity的,当Activity销毁的时候它也必须销毁,所以这里我们指定是Activity的Context。

  相关解决方案