用户在执行下面的代码时在他们的电话上遇到错误,我在运行 AsyncTask
进行 Web 服务调用之前检查用户当前是否正在通话.我这样做的原因是因为有些人在通话时会失去互联网连接,所以我每 5 秒检查一次,看看他们是否在通话。如果不是,则调用 AsyncTask
do{
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
onCall = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
.getCallState() != TelephonyManager.CALL_STATE_IDLE;
if(!onCall){
new CallRegWS().execute();
}
}
},5000);
}while(onCall);
我没有完整的堆栈跟踪,只有这个显示了错误
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
显然没有太大帮助,但这就是我必须继续的。他们不断收到该错误,因此在我创建处理程序时一定会发生。
所有这些都是在 main thread
中完成的,所以我不知道问题出在哪里,有什么办法可以解决这个问题吗?
更新 这是从服务调用的,该方法在单独的类中
最佳答案
尝试 Handler handler = new Handler(Looper.getMainLooper());
此外,请参阅有关此错误的帖子:http://levinotik.com/loopers-handlers-runtimeexceptions-explained/
关于android - 无法在主线程中创建处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11040627/