调用方法时出现NPE
为了删除应用程序数据,我尝试使用反射,但在调用方法
Class<?> myClass = Class.forName("android.content.pm.IPackageManager");
Method method = myClass.getMethod("clearApplicationUserData", String.class,IPackageDataObserver.class);
method.setAccessible(true);
Log.v("info",method.getName());
Object c = myClass .newInstance();
method.invoke(c,"com.example.android.apis",null); //NPE
clearApplicationUserData
时获取 NPE,不返回任何内容并采用两个参数 String
和 IPackageDataObserver
。
我传递的参数正确吗?
或者我该如何解决这个问题?
调试时的 StackTrace。
01-31 17:50:07.125: V/info(969): clearApplicationUserData
01-31 17:50:26.305: D/dalvikvm(969): newInstance failed: p0 i1 [0 a1
01-31 17:50:26.305: W/System.err(969): java.lang.InstantiationException: android.content.pm.IPackageManager
01-31 17:50:26.305: W/System.err(969): at java.lang.Class.newInstanceImpl(Native Method)
01-31 17:50:26.315: W/System.err(969): at java.lang.Class.newInstance(Class.java:1479)
01-31 17:50:26.325: W/System.err(969): at f.c.v.ClearUserDataUsingInterfaceActivity.onCreate(ClearUserDataUsingInterfaceActivity.java:52)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 17:50:26.355: W/System.err(969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-31 17:50:26.355: W/System.err(969): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-31 17:50:26.365: W/System.err(969): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-31 17:50:26.365: W/System.err(969): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-31 17:50:26.375: W/System.err(969): at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 17:50:26.375: W/System.err(969): at android.os.Looper.loop(Looper.java:123)
01-31 17:50:26.385: W/System.err(969): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-31 17:50:26.385: W/System.err(969): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 17:50:26.395: W/System.err(969): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:50:26.395: W/System.err(969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-31 17:50:26.405: W/System.err(969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-31 17:50:26.405:W/System.err(969):位于 dalvik.system.NativeStart.main(本机方法)
和完整堆栈跟踪。
01-31 17:26:38.285: E/AndroidRuntime(920): Uncaught handler: thread main exiting due to uncaught exception
01-31 17:26:38.295: E/AndroidRuntime(920): java.lang.RuntimeException: Unable to start activity ComponentInfo{f.c.v/f.c.v.ClearUserDataUsingInterfaceActivity}: java.lang.NullPointerException
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.os.Looper.loop(Looper.java:123)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:26:38.295: E/AndroidRuntime(920): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-31 17:26:38.295: E/AndroidRuntime(920): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-31 17:26:38.295: E/AndroidRuntime(920): at dalvik.system.NativeStart.main(Native Method)
01-31 17:26:38.295: E/AndroidRuntime(920): Caused by: java.lang.NullPointerException
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invokeNative(Native Method)
1-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:26:38.295: E/AndroidRuntime(920): at f.c.v.ClearUserDataUsingInterfaceActivity.onCreate(ClearUserDataUsingInterfaceActivity.java:57)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-31 17:26:38.295: E/AndroidRuntime(920): ... 11 more
For deleting the app data i am trying to use reflection but getting NPE when invoking method
Class<?> myClass = Class.forName("android.content.pm.IPackageManager");
Method method = myClass.getMethod("clearApplicationUserData", String.class,IPackageDataObserver.class);
method.setAccessible(true);
Log.v("info",method.getName());
Object c = myClass .newInstance();
method.invoke(c,"com.example.android.apis",null); //NPE
clearApplicationUserData
return nothing and take two parameters String
and IPackageDataObserver
.
Am i passing the correct parameters?
Or How can i solve the problem ?
StackTrace while debugging.
01-31 17:50:07.125: V/info(969): clearApplicationUserData
01-31 17:50:26.305: D/dalvikvm(969): newInstance failed: p0 i1 [0 a1
01-31 17:50:26.305: W/System.err(969): java.lang.InstantiationException: android.content.pm.IPackageManager
01-31 17:50:26.305: W/System.err(969): at java.lang.Class.newInstanceImpl(Native Method)
01-31 17:50:26.315: W/System.err(969): at java.lang.Class.newInstance(Class.java:1479)
01-31 17:50:26.325: W/System.err(969): at f.c.v.ClearUserDataUsingInterfaceActivity.onCreate(ClearUserDataUsingInterfaceActivity.java:52)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 17:50:26.355: W/System.err(969): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-31 17:50:26.355: W/System.err(969): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-31 17:50:26.365: W/System.err(969): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-31 17:50:26.365: W/System.err(969): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-31 17:50:26.375: W/System.err(969): at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 17:50:26.375: W/System.err(969): at android.os.Looper.loop(Looper.java:123)
01-31 17:50:26.385: W/System.err(969): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-31 17:50:26.385: W/System.err(969): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 17:50:26.395: W/System.err(969): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:50:26.395: W/System.err(969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-31 17:50:26.405: W/System.err(969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-31 17:50:26.405: W/System.err(969): at dalvik.system.NativeStart.main(Native Method)
and Full stacktrace.
01-31 17:26:38.285: E/AndroidRuntime(920): Uncaught handler: thread main exiting due to uncaught exception
01-31 17:26:38.295: E/AndroidRuntime(920): java.lang.RuntimeException: Unable to start activity ComponentInfo{f.c.v/f.c.v.ClearUserDataUsingInterfaceActivity}: java.lang.NullPointerException
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.os.Looper.loop(Looper.java:123)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:26:38.295: E/AndroidRuntime(920): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-31 17:26:38.295: E/AndroidRuntime(920): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-31 17:26:38.295: E/AndroidRuntime(920): at dalvik.system.NativeStart.main(Native Method)
01-31 17:26:38.295: E/AndroidRuntime(920): Caused by: java.lang.NullPointerException
01-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invokeNative(Native Method)
1-31 17:26:38.295: E/AndroidRuntime(920): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 17:26:38.295: E/AndroidRuntime(920): at f.c.v.ClearUserDataUsingInterfaceActivity.onCreate(ClearUserDataUsingInterfaceActivity.java:57)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-31 17:26:38.295: E/AndroidRuntime(920): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-31 17:26:38.295: E/AndroidRuntime(920): ... 11 more
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
IPackageManager
是一个接口(如“I”前缀所示)。您无法通过反射实例化接口。我猜你的意思是
android.content.pm.PackageManager
IPackageManager
is an interface( as suggested by the 'I' prefix). You cannot instantiate an interface via reflection.I'm guessing you've meant
android.content.pm.PackageManager
希望有帮助。
Hope it helps.
什么是
deleteClass
?您不应该尝试在myClass
上调用您的方法吗?What is
deleteClass
? Shouldn't you be trying to invoke your method onmyClass
?