8

非常仔细地遵循了Google 的 GCM 示例,但仍然遇到了令人沮丧的错误。在这里没有找到答案,所以我想我会记录下来以备将来参考。

我相当确定我已使用正确的权限等正确设置了清单(按照上面的示例进行操作)......但是这段代码总是导致 IOException 并解释为“MAIN_THREAD”。

String regid = "";
try {
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
    String sender_id = getResources().getString(R.string.GCM_sender_id);
    regid = gcm.register(sender_id);
    Log.d(TAG, "Device registered, registration id=" + regid);
} 
catch (IOException ex) {
    Log.e(TAG, "Device registration failed", ex);
}

我试图通过单步执行来找到问题,所以当然在主线程上执行了这段代码。回想起来,答案很明显......但我会在下面输入。

4

2 回答 2

12

鼓点……你不能在主线程上调用 register 方法。回想起来很明显,但也许还有其他人和我一样糟糕(但每天都少!)

于 2013-06-09T10:40:33.193 回答
1

在 AsyncTask (doInBackGround) 中调用 register 方法

于 2013-09-30T14:45:45.657 回答