我正在使用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。 预先感谢您抽出宝贵的时间!