现在有这么个需求:
Service要进行网络请求, 如果有用户预先设定的感兴趣的内容,请弹出对话框,而此时用户可能退出应用了
我现在的问题是,得到数据后对话框弹不出来:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
因为有网络请求, 我在service中新开了个线程来请求,然后使用handle来弹框但报上面这个错
搜了一下, 说是要Looper.prepare() Looper.loop() , 试了一下, 可以弹出一次, 但我线程里的方法是white(true){} 无限执行的, 调用这个只能弹出一次,线程就被中止了,求解决办法,先谢过!
------解决方案--------------------
弹出dialog activity就可以
------解决方案--------------------
public void createDialog(String text) {
final AlertDialog d = new Builder(getApplicationContext()).setMessage(text).setTitle(text).create();
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// 这句会使touch事件都失效
// d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
d.setButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
d.dismiss();
}
});
d.show();
}
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
楼主可以试试在服务启动时调用这个方法,如果能弹出再修改成你要的位置就好了
------解决方案--------------------
你把Looper.prepare() 放到while(true)的前面,Looper.prepare() 放到whiel(true)循环结束处的外面。
public void run() {
Looper.prepare();
while(true) {
。。。。
//弹出对话框
....
}
Looper.prepare();
}