2012-08-22 25 views
14

मैं इस त्रुटि हो रही है JNI त्रुटि (एप्लिकेशन बग): पहुँचा बासी वैश्विक संदर्भ जब मैं Android ओएस v4 में मेरे अनुप्रयोग चलाने, लेकिन जब मैं चलाने एंड्रॉइड v2.3 में एक ही एप्लीकेशन मुझे यह त्रुटि नहीं मिलती है।त्रुटि: JNI त्रुटि (एप्लिकेशन बग): पहुँचा बासी वैश्विक संदर्भ

यह त्रुटि, बिंदु जहां मैं AsyncTask वर्ग फोन पर होता है, जहां मैं तर्क के रूप में एक स्ट्रिंग सरणी

किसी को भी मेरी मदद कर सके पारित ??

+2

मैं [डेवलपर के लिए Google रिहाई बयान] में पढ़ने याद (http://android-developers.blogspot.ie/2011/11/jni-local-reference-changes-in-ics.html) कि आईसीएस में संभावित बहु-थ्रेडेड बग का कठोर सत्यापन होगा, शायद आप उसमें बस गए? – skolima

उत्तर

14

यह त्रुटि होती है जब आप किसी गलत पैरामीटर प्रकार के साथ कोई विधि कॉल करते हैं।

सुनिश्चित करें कि आपका विधि हस्ताक्षर ठीक से मेल खाता है जो आप पारित कर रहे हैं।

jmethodID mid = env->GetMethodID(cls, methodName, "([Ljava/lang/String;)V"); 

आप इसे अपने आप को बना रहे हैं, यह कुछ इस तरह दिखेगा:: एक स्ट्रिंग सरणी के लिए

jclass stringCls = env->FindClass("java/lang/String"); 
jobjectArray mStringArray = env->NewObjectArray(mSize, stringCls, NULL); 

अपने विशिष्ट मामले में, आप सबसे Android 2.3 पर दुर्घटना नहीं देख संभावना है क्योंकि आप AsyncTask.execute() को कॉल कर रहे हैं जो API 11 (एंड्रॉइड 3.0) तक उपलब्ध नहीं था और आपका jmethodID शून्य है। (उन्हें प्राप्त करने के बाद हमेशा jclass और jmethodID को शून्य के लिए जांचना अच्छा होता है)

+0

बस भविष्य के संदर्भ के लिए मैंने 'll' के साथ 'jlong' गलत वर्तनी की, जिसके परिणामस्वरूप – ZdaR

2

यह त्रुटि तब होती है जब आप किसी गलत पैरामीटर प्रकार के साथ कोई विधि कॉल करते हैं।

अतिरिक्त, इस मामले में आप मूल कोड से जावा कोड पर मूल विधि पंजीकृत कर सकते हैं। अंतर आप जावा कोड और देशी कोड के बीच कम या ज्यादा पैरामीटर घोषित कर सकते हैं।

1
+0

@ क्रॉसल ... mate एंड्रॉइड के लिए नया है और एक ही समस्या का सामना कर रहा है http://stackoverflow.com/questions/21423036/sqlite3- अपवाद-डेटाबेस-डिस्क-छवि-is-malformed pls बताएं कि मैं आपके कोड को कैसे कार्यान्वित कर सकता हूं .. मैं पिछले 3 सप्ताह से इसे सुधार रहा हूं :( – Gattsu