迁移到androidx后,ShareActionProvider NPE处于发布模式

时间:2019-12-04 11:55:16

标签: android nullpointerexception androidx shareactionprovider

我正在使用ShareActionProvider创建共享按钮。如果我在调试模式下运行该代码,则该代码运行良好,但是一旦我将构建变体更改为发布,它就会崩溃并抛出NPE。这是在最后一行崩溃的代码:

public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.jobdetail_menu, menu);
        MenuItem item = menu.findItem(R.id.menu_item_share);
        shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
        shareActionProvider.setShareIntent(createShareIntent());
        ...
}

我已经测试过将createShareIntent()更改为一个简单的新Intent,这没关系。由于我更新了所有依赖项并将应用程序迁移到androidx,因此出现了问题。这是崩溃日志:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.widget.r0.a(android.content.Intent)' on a null object reference
       at de.jobware.jana.activity.JobDetailActivity.onCreateOptionsMenu(JobDetailActivity.java:386)
       at android.app.Activity.onCreatePanelMenu(Activity.java:3680)
       at androidx.fragment.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:325)
       at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:94)
       at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onCreatePanelMenu(AppCompatDelegateImpl.java:2830)
       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:907)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:216)
       at android.app.ActivityThread.main(ActivityThread.java:7625)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

编辑:我发现了另一个问题:support.v7 ShareActionProvider crashes if showAsAction="always",指出这是由XML文件引起的,在我的项目中看起来是相同的:

<item
        android:id="@+id/menu_item_share"
        app:showAsAction="ifRoom"
        android:title="@string/share"
        app:actionProviderClass=
            "androidx.appcompat.widget.ShareActionProvider" />

但是由于我现在使用的是androidx,所以我无法将app:showAsAction更改为android:showAsAction,因为它不适用于appcompat。 预先感谢您抽出宝贵的时间!

0 个答案:

没有答案