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);
     }

Reply via email to