Java – Empty object reference with intent

Empty object reference with intent… here is a solution to the problem.

Empty object reference with intent

Thanks a lot for the given awning 🙂
The solution to my problem is, my line

Intent i = getIntent();

Not in my onCreate() function.
Thank you and have a great day.


I know, this kind of question is asked a lot on the internet, but I can’t find any answer that will help me, so I’ll bring my special case here.

This is my feature in MainActivity where I create an intent and start my second activity:

private void showArticle(String entryUrl, String entryTitle) {
    Intent intent = new Intent(this, ArticleActivity.class);
    intent.putExtra(EXTRA_URL, entryUrl.toString());
    intent.putExtra(EXTRA_TITLE, entryTitle.toString());
    Log.d("DEBUG", intent.getStringExtra(EXTRA_URL));
    Log.d("DEBUG", intent.getStringExtra(EXTRA_TITLE));
    Log.d("DEBUG", "EXTRAS PUTTED");
    startActivity(intent);
    Log.d("DEBUG", "ACTIVITY STARTED");
}

This is the console output:

01-02 15:29:21.808 7108-7108/com.example.myfirstapp D/DEBUG: http://example.com/correct-url
01-02 15:29:21.809 7108-7108/com.example.myfirstapp D/DEBUG: Yeah, we have the correct title hhere
01-02 15:29:21.809 7108-7108/com.example.myfirstapp D/DEBUG: EXTRAS PUTTED
01-02 15:29:21.809 7108-7108/com.example.myfirstapp I/Timeline: Timeline: Activity_launch_request id:com.example.myfirstapp time:1404863384
01-02 15:29:21.815 7108-7108/com.example.myfirstapp D/DEBUG: ACTIVITY STARTED

Sooo…’ until here everything is fine. Then, who guessed, my second activity opened :

Intent i = getIntent();

...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_article);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    if (i.getStringExtra(MainActivity.EXTRA_TITLE) == null) {
        setTitle("MEEP");
    } else {
        setTitle(i.getStringExtra(MainActivity.EXTRA_TITLE));
    }

...

But now my app crashes with this error message:

01-02 15:29:21.855 7108-7108/com.example.myfirstapp D/AndroidRuntime: Shutting down VM
01-02 15:29:21.870 7108-7108/com.example.myfirstapp E/AndroidRuntime:
        FATAL EXCEPTION: main
        Process: com.example.myfirstapp, PID: 7108
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.article.ArticleActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
          at android.app.ActivityThread.access$800(ActivityThread.java:156)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:211)
          at android.app.ActivityThread.main(ActivityThread.java:5373)
          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:1020)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
          at com.example.myfirstapp.article.ArticleActivity.onCreate(ArticleActivity.java:44)
          at android.app.Activity.performCreate(Activity.java:5990)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) 
          at android.app.ActivityThread.access$800(ActivityThread.java:156) 
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) 
          at android.os.Handler.dispatchMessage(Handler.java:102) 
          at android.os.Looper.loop(Looper.java:211) 
          at android.app.ActivityThread.main(ActivityThread.java:5373) 
          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:1020) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

Now my question is: why do I get a null pointer? I mean, the logs clearly show extra intent, why didn’t my second activity receive the key value? Who can help?
And thanks for every tip.

For more information, please leave a comment 🙂

Solution

What is your “I” in the second activity. Intent ?
If this intent is what you expect from the main activity, then you should put this code into onNewIntent() if your activity has the SIngleTop flag and this onNewIntent() should be overridden.

In onCreate(), to get this intent, you should do this

Intent i = getIntent()

Related Problems and Solutions