Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-10472

NullPointerException: Attempt to invoke virtual method 'android.os.Bundle org.apache.cordova.PluginManager.onSaveInstanceState

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 5.1.0
    • Fix Version/s: None
    • Component/s: cordova-android
    • Environment:

      cordova-android 5.1.0

      Description

      pluginManager not being check for null before using it in CordovaInterfaceImpl

      01-28 14:24:10.396 27684-27684/io.cordova.hellocordova E/AndroidRuntime﹕ FATAL EXCEPTION: main
      Process: io.cordova.hellocordova, PID: 27684
      java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle org.apache.cordova.PluginManager.onSaveInstanceState()' on a null object reference
      at org.apache.cordova.CordovaInterfaceImpl.onSaveInstanceState(CordovaInterfaceImpl.java:173)
      at org.apache.cordova.CordovaActivity.onSaveInstanceState(CordovaActivity.java:465)
      at android.app.Activity.performSaveInstanceState(Activity.java:1298)
      at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1288)
      at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:3958)
      at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3369)
      at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3425)
      at android.app.ActivityThread.access$1100(ActivityThread.java:151)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:135)
      at android.app.ActivityThread.main(ActivityThread.java:5254)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

      Recreate
      cordova create testapp
      cd testapp
      cordova platform add android@5.1.0

      Modify MainActivity to launch a second Cordova Activity like this:
      change MainActivity.java
      Notice no init or loadUrl called, this is on purpose in our App for this use case we want to avoid this, and let the second Activity to call loadUrl

      public class MainActivity extends CordovaActivity
      {
      @Override
      public void onCreate(Bundle savedInstanceState)

      { super.onCreate(savedInstanceState); }

      @Override
      protected void onStart()

      { super.onStart(); Intent newActivity = new Intent(this, MainActivity2.class); startActivity(newActivity); }

      }

      Add class io.cordova.hellocordova.MainActivity2.java
      public class MainActivity2 extends CordovaActivity
      {
      @Override
      public void onCreate(Bundle savedInstanceState)

      { super.onCreate(savedInstanceState); // Set by <content src="index.html" /> in config.xml loadUrl(launchUrl); }

      }

      Add activity to AndroidManifest.xml
      <activity android:name="io.cordova.hellocordova.MainActivity2" />

      Since init() or loadUrl was never called in MainActivity, pluginManager never got created, this let pluginManager be null

        Attachments

          Activity

            People

            • Assignee:
              csantana Carlos Santana
              Reporter:
              csantana Carlos Santana
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: