Fix NPE caused by NetworkManager sending update before JS is ready. This was happening for me when the device has been sleeping long enough to turn its networking off, and I start an app via adb.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/5289d569 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/5289d569 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/5289d569 Branch: refs/heads/master Commit: 5289d569b06437b5b6fdd536b693f1a2d04ef224 Parents: 6f873ff Author: Andrew Grieve <agri...@chromium.org> Authored: Tue Oct 2 09:49:53 2012 -0400 Committer: Andrew Grieve <agri...@chromium.org> Committed: Tue Oct 2 10:02:42 2012 -0400 ---------------------------------------------------------------------- .../org/apache/cordova/NativeToJsMessageQueue.java | 4 ++++ .../src/org/apache/cordova/NetworkManager.java | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/5289d569/framework/src/org/apache/cordova/NativeToJsMessageQueue.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java index 934088a..54c6eed 100755 --- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java +++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java @@ -219,6 +219,10 @@ public class NativeToJsMessageQueue { * Add a JavaScript statement to the list. */ public void addPluginResult(PluginResult result, String callbackId) { + if (callbackId == null) { + Log.e(LOG_TAG, "Got plugin result with no callbackId", new Throwable()); + return; + } // Don't send anything if there is no result and there is no need to // clear the callbacks. boolean noResult = result.getStatus() == PluginResult.Status.NO_RESULT.ordinal(); http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/5289d569/framework/src/org/apache/cordova/NetworkManager.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/NetworkManager.java b/framework/src/org/apache/cordova/NetworkManager.java index 8c8c400..f473abe 100755 --- a/framework/src/org/apache/cordova/NetworkManager.java +++ b/framework/src/org/apache/cordova/NetworkManager.java @@ -206,9 +206,11 @@ public class NetworkManager extends Plugin { * @param connection the network info to set as navigator.connection */ private void sendUpdate(String type) { - PluginResult result = new PluginResult(PluginResult.Status.OK, type); - result.setKeepCallback(true); - this.success(result, this.connectionCallbackId); + if (connectionCallbackId != null) { + PluginResult result = new PluginResult(PluginResult.Status.OK, type); + result.setKeepCallback(true); + this.success(result, this.connectionCallbackId); + } webView.postMessage("networkconnection", type); }