android – GCM更新7.5到8.3.0致命异常

我尝试在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的反编译类文件.当我使用Android Studio for 8.3.0版本时,看起来抛出异常的代码试图从调用服务的意图中获取ACTION.因为您使用显式意图调用服务,所以ACTION为null.

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...