-1

I'm practising a android studio app from a book called Head first android studio. Everything in the books looks ditto the contents below. But when i run the app over my phone, I run over an " java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.widget.ShareActionProvider.setShareIntent(android.content.Intent)' on a null object reference" error. Please help me out.

package com.aniketh.bitsandpizzas;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.widget.ShareActionProvider;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.MenuItemCompat;

public class MainActivity extends AppCompatActivity {

ShareActionProvider shareActionProvider;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar tool=findViewById(R.id.upper_toolbar);
    setSupportActionBar(tool);
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem menuItem=menu.findItem(R.id.action_create_order);
    shareActionProvider= (ShareActionProvider)MenuItemCompat.getActionProvider(menuItem);
    setShareActionIntent();
    return super.onCreateOptionsMenu(menu);
}
private void setShareActionIntent(){
    Intent intent=new Intent(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT, "Want to join me for pizza?");
    shareActionProvider.setShareIntent(intent);
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    if (item.getItemId() == R.id.action_create_order) {
        Intent intent = new Intent(this, order.class);
        startActivity(intent);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

Here's the XML file activity_main.xml

activity_order.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/upper_toolbar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/colorPrimary">
</androidx.appcompat.widget.Toolbar>

menu_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/action_create_order"
    android:title="@string/create_order"
    android:icon="@drawable/ic_add_white_24dp"
    android:orderInCategory="1"
    app:showAsAction="ifRoom"/>
<item android:id="@+id/action_share"
    android:title="@string/action_share"
    android:orderInCategory="2"
    app:showAsAction="ifRoom"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>

</menu>

Here's the error I get.

2020-05-08 14:12:52.174 19480-19480/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.aniketh.bitsandpizzas, PID: 19480
java.lang.NullPointerException: Attempt to invoke virtual method 'void 
androidx.appcompat.widget.ShareActionProvider.setShareIntent(android.content.Intent)' on a null 
object reference

    at com.aniketh.bitsandpizzas.MainActivity.setShareActionIntent(MainActivity.java:36)
    at com.aniketh.bitsandpizzas.MainActivity.onCreateOptionsMenu(MainActivity.java:30)
    at android.app.Activity.onCreatePanelMenu(Activity.java:3546)
    at androidx.fragment.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:325)
    at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:94)
    at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:94)
    at androidx.appcompat.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:455)
    at androidx.appcompat.app.ToolbarActionBar$1.run(ToolbarActionBar.java:56)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

I really don't understand what is wrong. Kindly help me out. Thnx in advance

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Aniketh S
  • 1
  • 4

1 Answers1

1

You forgot to add this:

 app:actionProviderClass="android.support.v7.widget.ShareActionProvider"

in your menu_main.xml for the item having the id action_create_order

Alan Deep
  • 2,037
  • 1
  • 14
  • 22