2013-01-19 64 views
3

我有一個設備已經註冊到GCM。我嘗試過搜索,但我無法找到任何類似的問題。大多數用戶似乎遇到了getRegistrationId返回非空字符串的問題。有關爲什麼會導致錯誤的任何想法?Android GCM註冊ID錯誤

public class UploadOption extends Activity{ 
    Intent extras = getIntent(); 
    String optionid = extras.getStringExtra("KEY_OPTION"); 
    String duration = extras.getStringExtra("KEY_DURATION"); 
    String reward = extras.getStringExtra("KEY_REWARD"); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.debug_layout); 

     final String regId = GCMRegistrar.getRegistrationId(this); 
     TextView tvDebug = (TextView) findViewById(R.id.tvDebug); 
     tvDebug.setText(regId); 

     // Stores option id, php grabs option. 
     //new Upload().execute(); 
    } 
} 

錯誤日誌如下:

01-18 18:02:51.756: D/AndroidRuntime(4478): Shutting down VM 
01-18 18:02:51.756: W/dalvikvm(4478): threadid=1: thread exiting with uncaught exception (group=0x4001e578) 
01-18 18:02:51.803: E/AndroidRuntime(4478): FATAL EXCEPTION: main 
01-18 18:02:51.803: E/AndroidRuntime(4478): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matt.drapp/com.matt.drapp.UploadOption}: java.lang.NullPointerException 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.os.Looper.loop(Looper.java:130) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at java.lang.reflect.Method.invoke(Method.java:507) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at dalvik.system.NativeStart.main(Native Method) 
01-18 18:02:51.803: E/AndroidRuntime(4478): Caused by: java.lang.NullPointerException 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at com.matt.drapp.UploadOption.<init>(UploadOption.java:32) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at java.lang.Class.newInstanceImpl(Native Method) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at java.lang.Class.newInstance(Class.java:1409) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565) 
01-18 18:02:51.803: E/AndroidRuntime(4478):  ... 11 more 

回答

3

問題歸因於Intent代碼。記住活動僅在onCreate()之後初始化,並且您正試圖在活動初始​​化之前獲取Intent值。

把下面的代碼onCreate();

Intent extras = getIntent(); 
String optionid = extras.getStringExtra("KEY_OPTION"); 
String duration = extras.getStringExtra("KEY_DURATION"); 
String reward = extras.getStringExtra("KEY_REWARD"); 

它應該在裏面工作。

+0

謝謝,就是這樣!有時候,它只需要另一雙眼睛。 – Chimi

1

哪條線在你的例子是導致NullPointerException異常。因爲如果僅僅是textView沒有被找到,那麼可能會導致整個應用程序崩潰,只是因爲你嘗試設置文本並且它是一個空對象。

所以首先,註釋textview的東西,看看它是否仍然有效。如果不是這樣,你能否讓我們知道你班上哪一行是第32行,因爲它顯然與此處不一樣。

0

問題是您的getRegistratonID返回null。這是因爲您在實際註冊GCM服務器之前在您的活動類中調用了它,並且接收到GCMIntentService的onRegistered回調。如果getRegistrationID返回null,則應該觸發一個AsyncTask來調用GCMRegistrar.register。

按照說明here