2013-05-07 3 views
0

У меня есть этот код в классе, который использует ShareActionProviderAndroid - ShareActionProvider исключение внутри TRY/улова разбился приложение

@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?

Спасибо!

+0

Добавили активность в Advertising.java на свой Android.manifest? – ACengiz

+0

Это странно. Вы абсолютно уверены, что ошибка генерируется в этом конкретном блоке try? Ради моего здравомыслия (и твоего), отбросьте некоторые операторы Log.i() до и после myShareActionProvider = (ShareActionProvider) item.getActionProvider(); Было бы также полезно увидеть ваш класс ShareActionProvider. – MarsAtomic

ответ

2

След указывает на getActionProvider(); нет метода на MenuItem с этим именем. Если вы посмотрите на documentation для MenuItem, вы увидите, что getActionProvider() доступен только на устройствах, работающих на уровне 14 (например, 4.0.x) или более. Предположительно (в вашем коде есть строка с «Это Android OS 2.3.6»), вы не используете этот код на устройстве, которое соответствует этому требованию.

Вы пытаетесь поймать Exception; NoSuchMethodError - Error. Не рекомендуется, чтобы вы их поймали. Вы должны просто проверить номер версии.

0

вы должны знать больше об андроиде v4, v7 и v7 appcompat.

попробуйте использовать

MenuItemCompat.getActionProvider(item); 

в вашем share_menu.xml проверить вы используете "YourApp: actionProviderClass" вместо "Android: действие" и дать значение как

«android.support.v7 .widget.ShareActionProvider "

Добавить xmlns: yourApp =" http://schemas.android.com/apk/res-auto "в пространство имен xml.

yourApp - это строка по вашему выбору. Надеюсь это поможет.