GCM 更新 7.5 到 8.3.0 致命异常

GCM update 7.5 to 8.3.0 fatal exception

我尝试更新我的 Gradle 项目中的 GCM 服务(Google 云消息)库(从 7.5 到 8.3.0)。 但是现在,有了这个新版本,我无法启动之前运行良好的 activity。

处理以下错误的代码是:

Intent in = new Intent(this, MyGcmListenerService.class);
startService(in);

MyGcmListenerService.java :

public class MyGcmListenerService extends GcmListenerService
{
    private static final String TAG = "MyGcmListenerService";

    @Override
    public void onMessageReceived(String from, Bundle data)
    {
        Log.w(TAG, "onMessageReceived");
    }

返回的错误:

FATAL EXCEPTION: AsyncTask #1
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zzo(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.run(Unknown Source)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)

Gradle 个文件:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services-gcm:8.3.0'
}

如果我回滚到以前的 GCM 版本 (7.5),它会按预期运行。 你知道发生了什么变化吗?我检查了变更日志,但找不到任何有关它的信息。 https://developers.google.com/android/guides/releases

感谢您的帮助

尝试使用 IDE 查看 GcmListenerService 的反编译 class 文件。当我使用 Android Studio for version 8.3.0 执行此操作时,似乎抛出异常的代码试图从调用服务的意图中获取 ACTION。因为您是以明确的意图调用服务,所以 ACTION 为空。

我想知道您为什么要显式调用 GcmListenerService 的子 class?消息接收的正常 GCM 处理是将消息传递给 GcmReceiver,然后将其传递给应用程序的 GcmListenerService 实例进行处理。您不应该显式调用您的侦听器服务,GcmReceiver 会这样做。看看 sample project.