2015-11-13 65 views
4

我嘗試在我的Gradle項目中更新GCM服務(Google雲消息)庫(從7.5到8.3.0)。 但現在,使用這個新版本,我無法啓動之前完美工作的以前的活動。GCM更新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) 

搖籃文件:

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

+1

非常感謝Qbix,這是我的一個錯誤,我不知道爲什麼我明確地調用了我的GcmListener,可能是我的測試代碼的一部分......你解決了它!謝謝:) – tryp

+1

我面臨同樣的問題,問題是當應用程序在後臺我的服務沒有啓動。所以我需要從廣播接收器明確地啓動它。在這種情況下我能做些什麼? – shift66