You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Richard B Knoll (JIRA)" <ji...@apache.org> on 2016/02/01 23:45:40 UTC

[jira] [Commented] (CB-10472) NullPointerException: Attempt to invoke virtual method 'android.os.Bundle org.apache.cordova.PluginManager.onSaveInstanceState

    [ https://issues.apache.org/jira/browse/CB-10472?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15127183#comment-15127183 ] 

Richard B Knoll commented on CB-10472:
--------------------------------------

I figured the repro steps were going to look something like that. I wonder how possible it is for us to really test all of the native scenarios that can come up in a meaningful way. Still, we might be able to work up some unit tests for this. [~csantana] is this a very common use case? Do you happen to know how often people write their own Activities?

> NullPointerException: Attempt to invoke virtual method 'android.os.Bundle org.apache.cordova.PluginManager.onSaveInstanceState
> ------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CB-10472
>                 URL: https://issues.apache.org/jira/browse/CB-10472
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android
>    Affects Versions: 5.1.0
>         Environment: cordova-android 5.1.0
>            Reporter: Carlos Santana
>            Assignee: Carlos Santana
>              Labels: android, regression, triaged
>
> 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



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org