我正在使用处理程序来获取GCM值 我想在我的数据库中更新这个值
所以我从处理程序中调用AsyncTask
但我收到此错误
java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
我检查了其他解决方案,他们说我必须把代码放在我已经做过的run()部分中。
这是代码,
private void GetGCM(final String UserID) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
GCMHelper gcmRegistrationHelper = new GCMHelper(getApplicationContext());
String gcmRegID = "";
gcmRegID = gcmRegistrationHelper.GCMRegister("123456");
// Update using Web Service
try {
UpdateGCMWSTask updateGCMWSTask = new UpdateGCMWSTask();
updateGCMWSTask.execute(UserID, gcmRegID);
// ************ HERE IS THE ERROR ***********************
}catch (Exception e)
{
e.printStackTrace();
}
} catch (Exception bug) {
bug.printStackTrace();
}
}
});
thread.start();
}
答案 0 :(得分:1)
您无法在线程内创建asynctask。处理它的方法很少:
创建一个新的处理程序。
调用函数runOnUIThread of activity。
使用广播。
答案 1 :(得分:1)
在代码中添加Looper.prepare()和Looper.loop(),如下所示:
private void GetGCM(final String UserID) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Looper.prepare();
GCMHelper gcmRegistrationHelper = new GCMHelper(getApplicationContext());
String gcmRegID = "";
gcmRegID = gcmRegistrationHelper.GCMRegister("123456");
// Update using Web Service
try {
UpdateGCMWSTask updateGCMWSTask = new UpdateGCMWSTask();
updateGCMWSTask.execute(UserID, gcmRegID);
// ************ HERE IS THE ERROR ***********************
}catch (Exception e)
{
e.printStackTrace();
}
Looper.loop();
} catch (Exception bug) {
bug.printStackTrace();
}
}
});
thread.start();
}