【发布时间】:2016-06-26 16:03:47
【问题描述】:
我正在尝试在 SherlockActivity 中使用 ActionBarSherlock + ShareActionProvider。 我已经检查过了(NullPointerException using ShareActionProvider + actionbarsherlock),但它并没有解决我的问题。 我认为代码是正确的,但我不断收到 FC 和这个 logcat:
07-25 15:31:26.758: E/AndroidRuntime(911): FATAL EXCEPTION: main
07-25 15:31:26.758: E/AndroidRuntime(911): java.lang.NullPointerException
07-25 15:31:26.758: E/AndroidRuntime(911): at com.corsalini.david.calcolopesi.ActCalcolo.onCreateOptionsMenu(ActCalcolo.java:162)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.actionbarsherlock.app.SherlockActivity.onCreatePanelMenu(SherlockActivity.java:173)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:556)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:483)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:273)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.actionbarsherlock.internal.ActionBarSherlockCompat$1.run(ActionBarSherlockCompat.java:988)
07-25 15:31:26.758: E/AndroidRuntime(911): at android.os.Handler.handleCallback(Handler.java:587)
07-25 15:31:26.758: E/AndroidRuntime(911): at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 15:31:26.758: E/AndroidRuntime(911): at android.os.Looper.loop(Looper.java:123)
07-25 15:31:26.758: E/AndroidRuntime(911): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-25 15:31:26.758: E/AndroidRuntime(911): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 15:31:26.758: E/AndroidRuntime(911): at java.lang.reflect.Method.invoke(Method.java:507)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-25 15:31:26.758: E/AndroidRuntime(911): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-25 15:31:26.758: E/AndroidRuntime(911): at dalvik.system.NativeStart.main(Native Method)
代码如下:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
MenuItem menuItem = menu.findItem(R.id.miShare);
ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
// Set the default share intent
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_text));
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_subject));
mShareActionProvider.setShareIntent(shareIntent); //Line 162
return true;
}
这里是菜单的xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/miPref"
android:icon="@drawable/ic_action_settings"
android:showAsAction="ifRoom"
android:title="@string/settings"
android:visible="true" />
<item
android:id="@+id/miReset"
android:icon="@drawable/ic_action_reset"
android:showAsAction="ifRoom"
android:title="@string/reset"
android:visible="true" />
<item
android:id="@+id/miShare"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom"
android:title="@string/share" />
</menu>
编辑1:
我正在尝试添加这一行: mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
现在 NullPointerException 就在这里。是否有可能没有这样的文件,所以我得到了例外?
编辑 2:不要照顾编辑 1 我发现问题出在 XML 中。 你必须使用:
android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider"
但我仍在使用原始的 android 小部件。 我还包括:
menuItem.setActionProvider(mShareActionProvider);
在活动中,但我认为这是多余的。
现在我有两个问题: 1. 仅当“共享”按钮未出现在操作栏中时,应用程序才不会崩溃,如果我尝试将其放在列表顶部,则应用程序崩溃并给出与此处发布的相同的 logcat . 2. 当我点击“分享”时没有任何反应。
【问题讨论】:
-
好的,让我们看一下提供的信息:“at com.corsalini.david.calcolopesi.ActCalcolo.onCreateOptionsMenu(ActCalcolo.java:162)” ActCalcolo.java 中的第 162 行是什么?跨度>
-
mShareActionProvider.setShareIntent(shareIntent); //第 162 行对不起 =)
-
我从未使用过 ActionBarSherlock,但
mShareActionProvider为 null,因此此menuItem.getActionProvider();找不到任何内容(它只是返回 null)。接下来我们将检查文档... -
我想我没听懂你的回答。 menuItem.getActionProvider() 从上面的行中获取菜单项,并且该项目肯定存在。还是我错过了什么?
-
嗯,NPE 在第 162 行。唯一可能导致这种情况的变量是
mShareActionProvider,所以当您初始化mShareActionProvider时,出现了问题。menuItem很好(这里没有 NPE)所以关于 getActionProvider() 和在miShare中设置你的 ActionProvider 是关闭的。 (但我在网上找不到太多文档......仍在寻找)
标签: android nullpointerexception android-actionbar actionbarsherlock shareactionprovider