2011-02-28 20 views
16

में कॉमनसी कोडेक का उपयोग करके NoSuchMethodError मैंने here निर्देश के बाद अपने एंड्रॉइड एप्लिकेशन के लिए ग्रहण में apache.org (commons-codec-1.4.jar) से कॉमन्स कोडेक जोड़ा। कोड में कोई त्रुटि नहीं है। लेकिन जब मैं एप्लिकेशन चलाता हूं और कोडेक का उपयोग करने वाले फ़ंक्शन को कॉल करता हूं तो एप्लिकेशन बंद हो जाता है और उसे आगे की आवश्यकता होती है।एंड्रॉइड एप्लिकेशन

Logcat में कहते हैं:

एंड्रॉयड रनटाइम: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String

codeline है: स्ट्रिंग tmpStr = Base64.encodeBase64String (एमएसजी); // संदेश एक बाइट []

आवेदन एक मिनट SDK संस्करण = 7 (एंड्रॉयड 2.1) के लिए है, तो मैं Android Base64

उपयोग नहीं कर सकते किसी भी विचार कैसे मैं इस समस्या का समाधान कर सकते हैं?

+2

का डुप्लिकेट है। बेस 64.decodeBase64, पैकेज WARN/dalvikvm (2 9 2) में विधि से संदर्भित: VFY: स्थैतिक विधि को हल करने में असमर्थ 29 9: लॉर्ग/अपाचे/कॉमन्स/कोडेक/बाइनरी/बेस 64;decodeBase64 (Ljava/lang/स्ट्रिंग;) [बी – DVV

+0

इस उत्तर पर विचार करें (मेवेन का उपयोग करके): http://stackoverflow.com/a/26548748/1084488 – Matthias

उत्तर

0

कारण आपको कोई समस्या है क्योंकि ये निर्देश गलत हैं लेकिन कॉमन्स-कोडेक या बेस 64 क्लास का एक अलग संस्करण होना चाहिए।

मेरी समझ यह है कि आपको अपनी परियोजना की जड़ पर अपनी जार फ़ाइल को 'libs' निर्देशिका में रखना होगा ताकि यह सुनिश्चित हो सके कि यह अंतिम एपीके के अंदर स्वचालित रूप से समाप्त हो जाए। एक बार जब आप इसे वहां डाल देते हैं, तो जार फ़ाइल पर राइट क्लिक करें और फिर पथ बनाने के लिए जोड़ें-> पथ बनाने के लिए जोड़ें। वहां से काम करना चाहिए।

+0

मैंने कॉमन्स-कोडेक-1.4.jar को एक lib फ़ोल्डर में डाला मेरे आवेदन का फ़ोल्डर। जैसा कि आप उल्लेख करते हैं, मैं जार फ़ाइलों को जोड़ता हूं लेकिन एक ही स्थिति है। यह चल रहा है, लेकिन जब एप्लिकेशन कोडेक का उपयोग कर रहे फ़ंक्शन को कॉल करता है तो यह फोरक्लोज़ होता है। लॉगकैट वही है। – DVV

+1

lib या libs? यह बहुत महत्वपूर्ण है कि यह 'libs' हो। –

+1

क्षमा करें, मेरा फ़ोल्डर नाम libs है। लेकिन वही है। रनटाइम त्रुटि से पहले लॉगकैट में निम्नलिखित हैं: 03-01 12: 47: 47.781: INFO/dalvikvm (264): विधि org.apache.commons.codec.binary.base64.encodeBase64String नहीं मिला, विधि डीवी से संदर्भित .sample.and.msgtest.calc 03-01 12: 47: 47.781: वॉर्न/दल्विकवम (264): वीएफवाई: स्थैतिक विधि को हल करने में असमर्थ 311: लॉर्ग/अपाचे/कॉमन्स/कोडेक/बाइनरी/बेस 64; .encodeBase64String ([बी) Ljava/लैंग/स्ट्रिंग; – DVV

8

मुझे 2.1 एमुलेटर पर चलाने के लिए कॉमन्स कोडेक नहीं मिल सका। मैं अंत में छोड़ दिया और अपने ही बनाया है, से कोड को कॉपी:

Base64 encoder/decoder

यह केवल सिर्फ एक सौ से अधिक लाइनों या तो है।

+0

मैंने Android.util.Base64 के स्रोत कोड को देखने का निर्णय लिया। मैंने कोड को 6464.java नामक एक नई जावा फ़ाइल में कॉपी किया। फिर मैंने एंड्रॉइड.टिल पैकेज के तहत अपनी परियोजना में फाइल को जोड़ा। मेरा आवेदन ठीक काम कर रहा है। लेकिन मुझे नहीं लगता कि यह सबसे अच्छा तरीका है और यह एंड्रॉइड एपीआई 8 या बाद में चलने पर एप्लिकेशन को कैसे प्रभावित कर सकता है, जिसमें इस वर्ग को शामिल किया गया है? – DVV

4

मुझे लगता है कि एंड्रॉइड लाइब्रेरीज़ के नामों के नाम के साथ इसका कुछ संबंध है।

मैंने अपनी परियोजना में org.apache.commons.codec.binary के नामस्थान में बेस 64 के जावा स्रोत कोड की प्रतिलिपि बनाई है। परियोजना बिना किसी समस्या के संकलित। हालांकि, एंड्रॉइड सिम्युलेटर में रनटाइम पर, मुझे एक ही त्रुटि थी, java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String।

हालांकि, मैंने नामस्थान के बजाय com.apache.commons.codec.binary में नेमस्पेस को बदलने के बाद, ऐप जादू की तरह चलता है। मुझे एंड्रॉइड कार्यान्वयन के अंदर लगता है, org.apache.commons.codec.binary का उपयोग किया जाता है और यह आपको इसे फिर से आपके कोड में उपयोग करने की अनुमति नहीं देता है।

7

मुझे एक ही समस्या का अनुभव हुआ। तो मैंने एंड्रॉइड स्रोत कोड ब्राउज़ करना शुरू कर दिया, और जैसा कि यह एंड्रॉइड के बारे में डॉन का अनुमान है कि org.apache.commons.code.binary का कार्यान्वयन सही है। वह इसे एक्सेस करने की क्षमता के बारे में गलत है, आप कर सकते हैं, लेकिन अपाचे कॉमन्स का संस्करण 1.2, संस्करण 1.4 या 1.5 भी नहीं। आप एंड्रॉइड source में अपने आप के लिए देख सकते हैं। जानकारी/dalvikvm (292): विधि org.apache.commons.codec.binary नहीं मिल सका

इसके अलावा एक नोट के रूप में, इस सवाल का LogCat का विश्लेषण करने से पहले रनटाइम त्रुटि का कहना है this post.

+0

पहला लिंक "स्रोत" टूटा हुआ है: एक्स –

+1

@ मिशेलएयर सुधार – zarthross

+0

जोड़ने के लिए, कॉमन्स पैकेज नामों को दोबारा करने के लिए एक सरल कामकाज है। – tstaylor7

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