1

Я искал проблему, с которой сталкиваюсь, но еще не нашел ничего, относящегося к тому, что я получаю от попытки получить InstanceID из GoogleCloudMessaging. Я попытался настроить вызов в классе, расширяющем IntentService, а также попытался использовать AsyncTask для вызова его в фоновом режиме, но безрезультатно.GoogleCloudMessaging InstanceID.getInstance возвращает null

Я ознакомился с учебными пособиями о том, как настроить манифест и приложение для получения правильной информации. Кто-нибудь знает, что может быть неправильным? Мои журналы говорят, что в экземпляре InstanceID.getInstance (getApplicationContext()) существует исключение nullPointerException;

мой призыв:

private class RegisterGCM extends IntentService{ 
    public RegisterGCM(){ 
     super("GcmIntentService"); 
     registerDevice(); 
    } 
    private void registerDevice(){ 
     InstanceID instanceId = InstanceID.getInstance(getApplicationContext()); 

     //Constants contains GCM_SENDER_ID which is the project number from Google Developer Console 
     String token = instanceId.getToken(Constants.GCM_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE); 
    } 
} 

Я ставлю этот класс в моем классе LandingPage после входа в систему и вызвать его:

new RegisterGCM(); 

Это называется сразу после проверки, если игровые услуги до дата и обновление.

Любые идеи? Если мне нужно предоставить больше информации, я могу, но это всего лишь фрагмент того, что я могу опубликовать.

EDIT: Пробовал добавлять пристальный фильтр для обслуживания в Manifest и проверки, если getApplicationContext() равно нулю, и это то, что исключение возвращается говорит мне:

06-15 16:42:38.614: W/System.err(17295): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference 
06-15 16:42:38.624: W/System.err(17295): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:110) 
06-15 16:42:38.624: W/System.err(17295): at com.google.android.gms.iid.InstanceID.zza(Unknown Source) 
06-15 16:42:38.624: W/System.err(17295): at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source) 
06-15 16:42:38.624: W/System.err(17295): at .gcmnotification.GcmIntentService.registerDevice(GcmIntentService.java:33) 
06-15 16:42:38.624: W/System.err(17295): at .gcmnotification.GcmIntentService.<init>(GcmIntentService.java:29) 
06-15 16:42:38.624: W/System.err(17295): at .LandingPageActivity.onCreate(LandingPageActivity.java:115) 
06-15 16:42:38.624: W/System.err(17295): at android.app.Activity.performCreate(Activity.java:6289) 
06-15 16:42:38.624: W/System.err(17295): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
06-15 16:42:38.624: W/System.err(17295): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
06-15 16:42:38.624: W/System.err(17295): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2777) 
06-15 16:42:38.624: W/System.err(17295): at android.app.ActivityThread.access$900(ActivityThread.java:179) 
06-15 16:42:38.624: W/System.err(17295): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1462) 
06-15 16:42:38.624: W/System.err(17295): at android.os.Handler.dispatchMessage(Handler.java:102) 
06-15 16:42:38.624: W/System.err(17295): at android.os.Looper.loop(Looper.java:145) 
06-15 16:42:38.624: W/System.err(17295): at android.app.ActivityThread.main(ActivityThread.java:5972) 
06-15 16:42:38.624: W/System.err(17295): at java.lang.reflect.Method.invoke(Native Method) 
06-15 16:42:38.624: W/System.err(17295): at java.lang.reflect.Method.invoke(Method.java:372) 
06-15 16:42:38.624: W/System.err(17295): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
06-15 16:42:38.624: W/System.err(17295): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 

это сообщение об ошибке вернулся из мой улов блок: Попытки вызвать виртуальный метод «android.content.Context android.content.Context.getApplicationContext()» на нулевую ссылку на объект

Таким образом, я предполагаю, что getApplicationContext возвращается нулем?

ответ

1

По словам гида, убедитесь, что ваш IntentService имеет разрешение на

<intent-filter> 
      <action android:name="com.google.android.gms.iid.InstanceID"/> 
</intent-filter> 

. Также, когда вы звоните в службу? Если вы явно не запускали его как exported = false в манифесте, getApplicationContext() может возвращать значение null. Выполняя код, он становится запутанным, но похоже, что вам может быть лучше использовать ссылку на контекст службы как несколько шагов вниз по строке, которую он вызывает getApplicationContext() из Контекста, в который вы проходите, и это, скорее всего, где ваш нулевой объект исходит из.

Я думаю, что этот вызов возвращает null для класса Application.

Посмотрите на конструктору здесь: Application class, а затем это супер: ContextWrapper, то вызов getApplicationContext()mBase называет объект, который выглядит как она равна нулю, следовательно, NPE.

+0

Я звоню из моего класса деятельности, как так: новый RegisterGCM(); и я проверяю, если его возможный мой контекст имеет значение null now –

+0

Я обновил свой вопрос при попытке этого, похоже, что это возвращается в блок catch catch. Попытка вызвать виртуальный метод 'android.content.Context android.content.Context. getApplicationContext() 'для ссылки на нулевой объект, так это значит, что getApplicationContext() возвращает null? –

1

Нельзя создавать экземпляр RegisterGCM().Он должен быть запущен с вызовом StartService() из вашей «Landing Page»:

if (checkPlayServices()) { 
    // Start IntentService to register this application with GCM. 
    Intent intent = new Intent(this, RegisterGCM.class); 
    startService(intent); 
} 

Смотрите полный пример here

+0

Это было именно то, что мне нужно, спасибо! – ndland

Смежные вопросы