29

कुछ उपयोगकर्ताओं मुझे अपवाद के बारे में बता है:एंड्रॉयड: java.lang.IllegalArgumentException: अमान्य पेलोड आइटम प्रकार

java.lang.IllegalArgumentException: Invalid payload item type 
at android.util.EventLog.writeEvent(Native Method) 
at android.app.Activity.onMenuItemSelected(Activity.java:2452) 
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:846) 
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153) 
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:956) 
at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:534) 
at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 
at android.view.View$PerformClick.run(View.java:11934) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4123) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:491) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
at dalvik.system.NativeStart.main(Native Method) 

लेकिन मैं नहीं समझ सकता कि क्या गलत हो सकता है। क्या किसी के पास समस्या के बारे में कुछ विचार हैं? मैंने उस अपवाद को दोहराने की कोशिश की है, लेकिन मैं ऐसा करने में असफल रहा।

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/about" 
      android:icon="@android:drawable/ic_menu_info_details" 
      android:title="@string/about_menu_item"/> 
    <item android:id="@+id/settings" 
      android:icon="@android:drawable/ic_menu_preferences" 
      android:title="@string/settings_menu_item"/> 
</menu> 
+0

ऑनमेनूटेम चयन() विधि में लाइन संख्या 2452 है? – Kerry

+23

मैंने केवल एंड्रॉइड 4.1.2 –

+0

चलाने वाले एलजी डिवाइस पर इस क्रैश को देखा है केवल जानकारी के लिए: मैंने एलजी पी 710, एलजी ई 460, एलजी ई 610 पर इस दुर्घटना को देखा है। वे सभी 4.1.2 चल रहे हैं। हास्यास्पद। – scana

उत्तर

7

मैं भी एक ही समस्या थी: यहाँ कोड

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.app_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.about: 
     startActivity(new Intent(this, AboutActivity.class)); 
     return true; 
    case R.id.settings: 
     startActivity(new Intent(this, SettingsActivity.class)); 
     return true; 
    case R.id.help: 
     startActivity(new Intent(this, AboutActivity.class)); 
     return true; 
    } 

    return true; 
} 
app_menu xlm फ़ाइल के साथ

है। यह पता चला कि मैं अपने तारों को प्रारूपित करने की कोशिश कर रहा था।

<string name="send"> 
     <b>Send</b> 
    </string> 

मैं करने के लिए इसे बदल दिया है:

<string name="send"> 
     Send 
    </string> 

मुझे आशा है कि इस मदद करता है।

आप सीडीएटीए टैग का भी उपयोग कर सकते हैं यहां एक संबंधित question link है।

 <string name="send"> 
      <![CDATA[<b>Send</b>]]> 
     </string> 

इस ओर इशारा करते हुए के लिए ट्रैविस के लिए धन्यवाद।

+0

पर सैमसंग जीटी-पी 5100 पर भी होता है आप स्ट्रिंग्स.एक्सएमएल फ़ाइल में एचटीएमएल नहीं रख सकते हैं, जब तक कि यह सीडीएटीए टैग द्वारा संरक्षित न हो। – Travis

2

मैं एक ही समस्या थी

मेनू आइटम के साथ Android 4.1 में समस्या स्ट्रिंग्स

मूल रूप से, मेरे मेनू आइटम इस तरह किया गया है:

<item android:id="@+id/item1" android:title="@string/ic_login" 
    android:icon="@drawable/ic_login" android:orderInCategory="100" > 
</item> 

और कहा कि काम नहीं किया ।

मैं इस में बदलने:

<item android:id="@+id/item1" 
    android:title="Login" 
    android:orderInCategory="100" 
    android:icon="@drawable/ic_login" 
/> 

और कहा कि अच्छी तरह से काम किया।

+0

मेरे ऐप में कुछ गतिविधि है। यह किसी पर अच्छा काम करता है और दूसरे पर एक ही समस्या है। मुझे नहीं पता क्यों? – khaintt

1

मुझे पता चला कि इस त्रुटि का कारण कैसे है। बढ़ मेनू में, मुझे लगता है कि

menu.setTitle(Html.fromHtml("Menu line #1<br>And what is displayed on line #2")); 

तरह शीर्षक सेट जब मैं इस सेटिंग का उपयोग, यह अमान्य पेलोड अपवाद का कारण होगा। तब मैं का उपयोग

menu.setTitle("Menu line #1. Opps, can not set what is displayed on line #2"); 

यह जब मैं एंड्रॉयड में जाना जाता है के रूप में ठीक काम करते हैं। मैं चाहता हूं कि मेरे मेनू में 2 लाइनें हों, इसलिए लाइन को तोड़ने के लिए एचटीएमएल टैग का उपयोग करें, लेकिन केवल गतिविधि पर सफलता, लेकिन दूसरे पर फंस गई। मुझे नहीं पता कि क्या खुशी है। किसी के पास कोई और विचार या समाधान है?

3

मुझे एक ही समस्या थी, लेकिन एंड्रॉइड सोर्स कोड देखकर, मैंने पाया कि एक आंतरिक लॉग लिखते समय समस्या होती है, जो एक स्वरूपित पाठ मुद्रित नहीं कर सकता है।

समाधान: इस फ़ंक्शन को पुन: कार्यान्वित करके बस इस लॉग को छोड़ें और इसके सुपर को कॉल न करें !!

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    ... // Do your staff 
    return true; 
} 
+5

मेरी गतिविधियां 'android.support.v7.app.ActionBarActivity' का विस्तार करती हैं और उस विधि को ओवरराइड नहीं किया जा सकता है क्योंकि यह 'अंतिम' है ... :( –

+0

यह मेरे लिए काम करता है, मेन्यूइटेम पर ओवरराइड करें चयनित विधि – Lokesh

11

AppCompat का उपयोग कर उन लोगों के लिए:

आप Activity.onMenuItemSelected() ओवरराइड नहीं कर सकते। आप सभी की जरूरत MenuItem के title स्वरूपण लागू करने के लिए है और आप titleCondensed के बारे में परवाह नहीं करते हैं:

CharSequence rawTitle = "Click here"; 
    menuItem.setTitleCondensed(rawTitle); 

    SpannableString spannableTitle = new SpannableString(rawTitle); 
    //...whatever formatting on spannableTitle, you want 
    menuItem.setTitle(spannableTitle); 
8

मेरे लिए इस त्रुटि केवल ActionBar शीर्षक/उपशीर्षक में एक कस्टम फ़ॉन्ट SpannableString के लिए हुई। कस्टम स्वरूपण को हटाने से समस्या हल हो गई।

हैक (खेद एलजी ;-):

public static void setActionBarTitle(ActionBarActivity a, String s) { 
    SpannableString ss = new SpannableString(s); 
    ss.setSpan(new TypefaceSpan(a, "Roboto-Light.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

    ActionBar actionBar = a.getSupportActionBar(); 
    actionBar.setDisplayShowTitleEnabled(true); 
    actionBar.setLogo(R.drawable.icon); 
    actionBar.setTitle(isManufacturer("LG") ? s : ss); 
} 

public static boolean isManufacturer(String company) { 
    String manufacturer = Build.MANUFACTURER; 
    String model = Build.MODEL; 

    return (manufacturer.contains(company) || model.contains(company)); 
} 
+0

हाय मैट्यूज़, मुझे मिल रहा है एक ही त्रुटि (हमेशा एलजी उपकरणों पर) और हमारे पास एक स्टाइल एक्शन बार शीर्षक है। एक प्रश्न: क्या आपको वही त्रुटि मिली? क्योंकि स्टैक ट्रेस मेनू पर इंगित करता है, न कि एक्शन बार शीर्षक। अगर आपको एक भी मिला 'menuItem चयनित' कहने में त्रुटि तो शायद हम आपके जैसा ही अनुभव कर रहे हैं। धन्यवाद! –

+0

हां एक ही त्रुटि। जहाँ तक मुझे याद है कि यह केवल 47 उपकरणों के साथ एलजी उपकरणों पर हुआ था और मुझे मेनू के साथ एक्शनबार भी नहीं मिला है। इस त्रुटि को रोकने में हैक को देखने के लिए मेरे संपादित उत्तर पर –

+1

उस विचार के लिए धन्यवाद। ध्यान दें कि आपका हैक नेक्सस 5 और अन्य सहित सभी एलजी उपकरणों पर सक्रिय किया जाएगा ... शायद हम condit भी जोड़ सकते हैं आयन 'Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN' केवल एंड्रॉइड 4.1 पर हैक को सक्रिय करने के लिए। –

16

की तरह लोगों ने कहा है, बग तब होती है जब जब यह प्रणाली इवेंटलॉग को लिखते गतिविधि में एक Android बग की वजह से, MenuItem शीर्षक में स्वरूपण है।

https://android-review.googlesource.com/#/c/47831/

हालांकि मैं केवल यह एलजी पर प्रकट देखा है अब तक, ऐसा लगता है जैसे कि यह ठीक से पहले एंड्रॉयड के किसी भी संस्करण में क्या होगा। जहां तक ​​मैं उस प्रतिबद्धता से कह सकता हूं, सबसे पुरानी रिलीज में इसे टैग किया गया था 4.3 था, लेकिन हो सकता है कि मैं इसे गलत पढ़ रहा हूं।

गतिविधि में onMenuItem चयनित, वे MenuItem.getTitleCondensed() का उपयोग करते हैं जो त्रुटि का कारण बनता है। मैं कहीं भी संघनित शीर्षक का उपयोग नहीं करता, और जहां तक ​​मैं डिफ़ॉल्ट रूप से इसका उपयोग करने वाले विचारों को बता सकता हूं, v7 समर्थन लाइब्रेरी तक पेश नहीं किया गया था और हम v4 का उपयोग कर रहे हैं।

तो, मेरा परिवर्तन मेन्यूइटम पर ओवरराइड करना था, मूल गतिविधि वर्ग में चयन किया गया और संघ के शीर्षक को शीर्षक के स्ट्रिंग संस्करण के रूप में सेट किया गया। यह स्वरूपित शीर्षक (एक कस्टम फ़ॉन्ट के साथ) की तरह प्रदर्शित किया की सुविधा देता है, और फिर ईवेंट लॉग के लिए सादे स्ट्रिंग एक का उपयोग करें:

@Override 
public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { 
    // fix android formatted title bug 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 
      && item.getTitleCondensed() != null) { 
     item.setTitleCondensed(item.getTitleCondensed().toString()); 
    } 

    return super.onMenuItemSelected(featureId, item); 
} 

शायद आप यह 4.1.2 में सिर्फ कर सकता है, या बस एलजी के लिए है, लेकिन यह मुझे स्पष्ट नहीं है कि यह अन्य संस्करणों पर क्यों प्रकट नहीं हुआ है। ऐसा लगता है कि बग कहीं और हो सकता है। हो सकता है कि कोई इसे पेश किए जाने पर पता लगा सके, लेकिन अतिरिक्त स्ट्रिंग को सेट करने के लिए बहुत कम नकारात्मक लग रहा था।

+1

इस कामकाज के लिए धन्यवाद। हालांकि, सावधान रहें कि एक्शनमेनूइटम इस विधि में पारित हो सकता है GetTitleCondensed() के लिए MenuItem अनुबंध का उल्लंघन कर सकता है, यानी यह शून्य हो सकता है। यहां एंड्रॉइड स्रोत देखें: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.2_r1/com/android/internal/view/menu/ActionMenuItem। जावा # ActionMenuItem.getTitleCondensed% 28% 29 – gnuf

+0

हाँ, क्या @gnuf ने कहा। इसे मारने के बाद पहले से ही मेरे कोड में ठीक है - मैं प्रतिक्रिया अद्यतन कर दूंगा। –

0

मैं एक ही समस्या

समस्या Android 4.1 में है मेनू आइटम तार

strings.xml में मूल स्ट्रिंग स्ट्रिंग और उस didn में बोल्ड टैग का उपयोग करने से स्वरूपित नहीं किया जा सकता था काम नहीं करता तब मैंने बोल्ड टैग हटा दिया और यह अच्छी तरह से काम किया।

1

समर्थन लाइब्रेरी के तहत ड्रॉवरलेआउट के साथ टूलबार का उपयोग करने वाले किसी भी व्यक्ति के लिए, यह समस्या उनके लिए भी हो सकती है। डिफ़ॉल्ट समस्या नेविगेशन क्लिक कार्यान्वयन को ओवरराइड करके इस समस्या को हल किया जा सकता है।

@Override 
public void setSupportActionBar(Toolbar toolbar) { 
    super.setSupportActionBar(toolbar); 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      openDrawer(); 
     } 
    }); 
} 

यह काम करना चाहिए।

2

मेन्यूइटम चयन के साथ "बहुत अच्छा नहीं" विचार है (...)

@Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    if (item.getTitle() instanceof SpannableString) { 
     SpannableString sp = (SpannableString)item.getTitle(); 
     Object[] spans = sp.getSpans(0, sp.length(), Object.class); 
     if (spans != null && spans.length > 0) { 
      // set text without span markups, need for super.onMenuItemSelected(featureId, item); 
      item.setTitleCondensed(sp.toString()); 
      boolean result = super.onMenuItemSelected(featureId, item); 
      item.setTitleCondensed(sp); 
      return result; 
     } 
    } 


    return super.onMenuItemSelected(featureId, item); 
} 

यह

की तरह वैकल्पिक हल कार्रवाई एक कच्चे स्ट्रिंग सेट करने के लिए है, एक गाड़ी जगह से उबरे, मूल स्वरूपित स्ट्रिंग वापस निर्धारित किया है। मैं विचार है कि स्वरूपित स्ट्रिंग इस उदाहरण में एक SpannableString वस्तु है, हो सकता है आप setDisplayHomeAsUp() बुला के बाद किसी और

0

कॉलिंग setSupportActionBar() कुछ का उपयोग करेंगे भी इस मुद्दे का कारण बन रहा है। कई setSupportActionBar() कॉलों की जांच करने की अनुशंसा की जाती है, खासकर आधार वर्गों में यदि वे मौजूद हैं।

अनपेक्षित कॉल को setSupportActionBar() पर हटाने पर, समस्या दूर हो गई।

संबंधित मुद्दे