我试图在我的gradle项目中更新gcm服务(google云消息)库(从7.5到8.3.0)。
但现在,有了这个新版本,我无法启动我以前完美工作的活动。
处理以下错误的代码是:

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$1.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的反编译类文件。当我使用androidstudioforversion8.3.0时,似乎引发异常的代码试图从调用服务的意图获取操作。因为您使用显式意图调用服务,所以操作为空。
我想知道为什么要显式调用GcmListenerService的子类?消息接收的一般gcm处理是将消息传递给GcmReceiver,然后将其传递给应用程序的GcmListenerService实例进行处理。不应该显式调用侦听器服务,GcmReceiver会这样做。看看sample project

08-17 21:12