Android - 在try / catch中的ShareActionProvider异常使应用程序崩溃

时间:2013-05-07 22:26:43

标签: android shareactionprovider

我在使用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块中,它怎么会崩溃?

谢谢!

2 个答案:

答案 0 :(得分:2)

跟踪指向getActionProvider(); MenuItem上没有使用该名称的方法。如果您查看MenuItem的{​​{3}},您会发现getActionProvider()仅适用于运行在14级(即4.0.x)或更高级别的设备。大概(代码中有"这是Android OS 2.3.6和#34;)您没有在满足该要求的设备上运行此代码。

你试图抓住Exception; NoSuchMethodErrorError。不建议您抓住这些。您应该检查版本号。

答案 1 :(得分: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是您选择的字符串。希望这会有所帮助。