के प्रसारण रिसीवर को पंजीकृत करने का प्रयास करते समय "java.lang.reflect.InvocationTargetException" प्राप्त करना मेरे ऐप में एक एम्बेडेड एपीके है, मुझे अपने मुख्य एपीके से आंतरिक एपीके में BroadcastReceiver
पंजीकृत करने की आवश्यकता है।एम्बेडेड एपीके
आंतरिक एपीके सिस्टम पर स्थापित नहीं किया जाना है; मुझे इसे गतिशील रूप से लोड करना होगा। इसलिए, मैं आंतरिक एपीके में एक विधि को कॉल करने के लिए प्रतिबिंब का उपयोग कर रहा हूं जिसमें BroadcastReceiver
पंजीकृत करने के लिए कोड है। आंतरिक एपीके के इस रिसीवर को संबंधित प्रसारण के लिए आह्वान करना चाहिए।
BroadcastReceiver
पंजीकृत करने का प्रयास करते समय मुझे एक त्रुटि मिल रही है। क्या इस तरह से पंजीकृत होने के लिए BroadcastReceiver
के लिए भी संभव है, और पूरी तरह कार्यात्मक हो? अपवाद और कोड नीचे
त्रुटि संबंधित लॉग दिए गए हैं:
08-24 08:31:26.915: D/MainApp(1957): invoke method
08-24 08:31:26.955: D/InnerApp(1957): Register receiver
08-24 08:31:26.955: W/System.err(1957): java.lang.reflect.InvocationTargetException
08-24 08:31:26.965: W/System.err(1957): at java.lang.reflect.Method.invokeNative(Native Method)
08-24 08:31:26.965: W/System.err(1957): at java.lang.reflect.Method.invoke(Method.java:515)
08-24 08:31:26.965: W/System.err(1957): at com.example.ea_mainapp.MainApp.invokeService(MainApp.java:105)
08-24 08:31:26.965: W/System.err(1957): at com.example.ea_mainapp.MainApp.onCreate(MainApp.java:40)
08-24 08:31:26.965: W/System.err(1957): at android.app.Activity.performCreate(Activity.java:5231)
08-24 08:31:26.975: W/System.err(1957): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-24 08:31:26.975: W/System.err(1957): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-24 08:31:26.975: W/System.err(1957): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-24 08:31:26.975: W/System.err(1957): at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-24 08:31:26.975: W/System.err(1957): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-24 08:31:26.975: W/System.err(1957): at android.os.Handler.dispatchMessage(Handler.java:102)
08-24 08:31:26.975: W/System.err(1957): at android.os.Looper.loop(Looper.java:136)
08-24 08:31:26.975: W/System.err(1957): at android.app.ActivityThread.main(ActivityThread.java:5017)
08-24 08:31:26.975: W/System.err(1957): at java.lang.reflect.Method.invokeNative(Native Method)
08-24 08:31:26.975: W/System.err(1957): at java.lang.reflect.Method.invoke(Method.java:515)
08-24 08:31:26.975: W/System.err(1957): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-24 08:31:26.975: W/System.err(1957): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-24 08:31:26.975: W/System.err(1957): at dalvik.system.NativeStart.main(Native Method)
08-24 08:31:26.985: W/System.err(1957): Caused by: java.lang.NullPointerException
08-24 08:31:26.985: W/System.err(1957): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:467)
08-24 08:31:26.985: W/System.err(1957): at com.example.ea_innerapp.InnerApp.register(InnerApp.java:50)
08-24 08:31:26.985: W/System.err(1957): ... 18 more`
मुख्य app से संबंधित कोड:
// invoke method
Log.d(TAG,"invoke method");
final String apkFile =TARGET_BASE_PATH+"EA_innerApp.apk";
String className = "com.example.ea_innerapp.InnerApp";
String methodToInvoke = "register";
final File optimizedDexOutputPath = getDir("outdex", 0);
DexClassLoader dLoader = new DexClassLoader(apkFile,optimizedDexOutputPath.getAbsolutePath(),
null,ClassLoader.getSystemClassLoader().getParent());
try {
Class<?> loadedClass = dLoader.loadClass(className);
Object obj = (Object)loadedClass.newInstance();
@SuppressWarnings("rawtypes")
Class noparams[] = {};
Method m = loadedClass.getMethod(methodToInvoke, noparams);
Object oNoparams[] = {};
m.invoke(obj, oNoparams);
} catch (ClassNotFoundException e) {....
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
लागू विधि संहिता, "com.example.ea_innerapp.InnerApp.register" :
Log.d(TAG, "Register receiver");
IntentFilter filter=new IntentFilter();
filter.addAction("com.example.ea_mainapp.i");
registerReceiver(obj_InnerReceiver,filter);
आप भीतरी (कारण) NullPointerException कहीं com.example.ea_innerapp.InnerApp.register से कॉल स्टैक नीचे कदाचित समस्या की जांच की थी, लेकिन वह डेटा अपनी पोस्ट में उपलब्ध नहीं है –
@ Matjaž एक प्रकार का अखरोट:। " com.example.ea_innerapp.InnerApp.register "मुख्य ऐप द्वारा लागू विधि है। कोड इस विधि को पोस्ट में दिया गया है, मैं इसे स्पष्ट करने के लिए शीर्षक संपादित कर दूंगा। इस विधि को केवल प्रसारण रिसीवर पंजीकृत करना है। मेरे परीक्षणों के दौरान, आंतरिक ऐप स्वतंत्र रूप से ठीक काम करता है, लेकिन जब मैं आंतरिक एपीके (सिस्टम पर स्थापित नहीं) की इस विधि का आह्वान करता हूं तो मुझे उस अपवाद को उस रेखा पर मिलता है जहां यह रिसीवर – blackfyre
रजिस्टर करने के लिए "रजिस्टर रिसीवर" विधि को कॉल करता है। मुझे यकीन नहीं है कि क्या मुद्दा यह है कि, मुझे लगता है कि यह संदर्भ से संबंधित हो सकता है, लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए – blackfyre