0

我在使用的类中有此代码ShareActionProvider

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    try
    {
        getMenuInflater().inflate(R.layout.menu, menu);
        MenuItem item = menu.findItem(R.id.menu_item_share);
        myShareActionProvider = (ShareActionProvider)item.getActionProvider();
        myShareActionProvider.setShareHistoryFileName(
          ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
        myShareActionProvider.setShareIntent(createShareIntent());
        return true;
    }
    catch ( Exception e )
    {

    }

    return false;
}

This is the Android OS 2.3.6

坠机事故是这样说的

java.lang.NoSuchMethodError: android.view.MenuItem.getActionProvider
        at com.marketing.AdvertisingActivity.onCreateOptionsMenu(AdvertisingActivity.java:183)
        at android.app.Activity.onCreatePanelMenu(Activity.java:2194)
        at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:360)
        at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:605)
        at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1259)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1717)
        at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2607)
        at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2582)
        at android.view.ViewRoot.handleMessage(ViewRoot.java:1914)
        at android.os.Handler.dispatchMessage(Handler.java:130)
        at android.os.Looper.loop(SourceFile:351)
        at android.app.ActivityThread.main(ActivityThread.java:3814)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:538)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:659)
        at dalvik.system.NativeStart.main(Native Method)

当应用程序在 try/catch 块内时,它怎么会崩溃?

谢谢!

4

2 回答 2

2

跟踪指向getActionProvider(); 该名称没有可用的方法MenuItem。如果您查看 的文档MenuItem您会发现它getActionProvider()仅在运行在 14 级(即 4.0.x)或更高版本的设备上可用。大概(您的代码中有一行带有“这是Android OS 2.3.6”)您没有在满足该要求的设备上运行此代码。

你试图抓住一个Exception; NoSuchMethodError是一个Error。不建议你抓住这些。你应该只检查版本号。

于 2013-05-07T22:45:45.100 回答
0

您应该了解更多关于 android v4、v7 和 v7 appcompat 的信息。

尝试使用

MenuItemCompat.getActionProvider(item);

在您的 share_menu.xml 中验证您使用的是“yourApp:actionProviderClass”而不是“android:action”,并将值设为

“android.support.v7.widget.ShareActionProvider”

将 xmlns:yourApp="http://schemas.android.com/apk/res-auto" 添加到 xml 命名空间。

yourApp 是您选择的字符串。希望这可以帮助。

于 2016-04-15T09:51:05.553 回答