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.
我尝试更新我的 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.