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