我尝试在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
感谢您的帮助
答案 0 :(得分:7)
尝试使用IDE查看GcmListenerService
的反编译类文件。当我使用Android Studio for 8.3.0版本时,看起来抛出异常的代码试图从调用服务的意图中获取ACTION。因为您使用显式意图调用服务,所以ACTION为空。
我想知道为什么要明确调用GcmListenerService
的子类?邮件接收的正常GCM处理是将邮件传递给GcmReceiver
,然后将其传递到应用程序的GcmListenerService
实例进行处理。您不应该显式调用您的侦听器服务,GcmReceiver
会这样做。看看sample project。