Проблемы с PhoneGap Google Cloud Messaging Android

02-01 14:16:32.054: E/AndroidRuntime(17134): FATAL EXCEPTION: pool-2-thread-2
02-01 14:16:32.054: E/AndroidRuntime(17134): java.lang.NullPointerException
02-01 14:16:32.054: E/AndroidRuntime(17134):    at org.apache.cordova.NativeToJsMessageQueue.addPluginResult(NativeToJsMessageQueue.java:233)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at org.apache.cordova.CordovaWebView.sendPluginResult(CordovaWebView.java:548)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at org.apache.cordova.api.Plugin.sendPluginResult(Plugin.java:110)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at org.apache.cordova.api.Plugin$1.run(Plugin.java:82)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-01 14:16:32.054: E/AndroidRuntime(17134):    at java.lang.Thread.run(Thread.java:856)

Я продолжаю получать эту ошибку. Это происходит после того, как приложение открывается в первый раз и регистрирует устройство в Google Cloud Messaging. Кажется, все идет нормально, но затем я приостанавливаю приложение, а затем, когда оно возобновляется, оно по какой-то причине вызывает функцию отмены регистрации, а затем сразу же происходит сбой, но затем продолжает снова регистрировать устройство с помощью Google Cloud Messaging, поэтому, как только я снова захожу в приложение он находится в точном состоянии, в котором он должен быть, если бы он не закрывался принудительно. И затем, если я приостанавливаю и возобновляю приложение после этого, оно больше не закрывается принудительно.

У кого-нибудь еще был опыт с этим или какие-либо идеи о том, что вызывает это?

Я реализовал плагин GCM PhoneGap с помощью https://github.com/marknutter/GCM-Cordova.


person Brandon    schedule 01.02.2013    source источник


Ответы (1)


Я не уверен, почему ваш код вызывает отмену регистрации, когда ваше приложение возобновляет работу.

Но я могу исправить NullPointerException, когда это произойдет:

Я отладил код плагина GCM и обнаружил, что ошибка в файле GCMPlugin.java в строке 75.

Оператор if/else для отмены регистрации не предоставил PluginResult! Поэтому я добавил следующую дополнительную строку, и исключение NullPointerException исчезло:

else if (UNREGISTER.equals(action)) {
  GCMRegistrar.unregister(this.ctx.getContext());
  Log.v(ME + ":" + UNREGISTER, "GCMRegistrar.unregister called ");

  result = new PluginResult(Status.OK); //added line

}
person Jeremy    schedule 30.03.2013