【问题标题】:Attempt to invoke virtual method 'void androidx.appcompat.widget.ShareActionProvider.setShareIntent(android.content.Intent) [duplicate]尝试调用虚拟方法'void androidx.appcompat.widget.ShareActionProvider.setShareIntent(android.content.Intent)[重复]
【发布时间】:2020-05-08 09:45:20
【问题描述】:

我正在从一本名为 Head first android studio 的书中练习一个 android studio 应用程序。书中的所有内容看起来都与下面的内容相同。但是当我通过手机运行应用程序时,我遇到了“java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.widget.ShareActionProvider.setShareIntent(android.content.Intent)' on an null object reference “ 错误。请帮帮我。

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);
}

}

这是 XML 文件 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>

这是我得到的错误。

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)

我真的不明白出了什么问题。请帮帮我。提前谢谢

【问题讨论】:

    标签: java android nullpointerexception


    【解决方案1】:

    你忘了添加这个:

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

    在您的 menu_main.xml 中查找 ID 为 action_create_order 的项目

    【讨论】:

    • 注意错误中的类名:它是androidx,而不是android.support
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多