Java 调用方法时的NPE
为了删除应用程序数据,我尝试使用反射,但在调用方法时获得NPEJava 调用方法时的NPE,java,android,reflection,methods,Java,Android,Reflection,Methods,为了删除应用程序数据,我尝试使用反射,但在调用方法时获得NPE Class<?> myClass = Class.forName("android.content.pm.IPackageManager"); Method method = myClass.getMethod("clearApplicationUserData", String.class,IPackageDataObserver.class); method.setAccessible(true); Log.v("i
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
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
希望有帮助。什么是
deleteClass
?您是否应该尝试在myClass
上调用您的方法?IPackageManager
是一个接口(如“I”前缀所示)。不能通过反射实例化接口
我猜你的意思是
android.content.pm.PackageManager
什么是deleteClass
?给我们看stacktrace.给我们看stacktrace。NPE是否在clearApplicationUserData
中抛出?很可能它不支持null作为参数。因此根本不支持NPE。实际上,当您尝试实例化和调用接口上的方法时,您会得到InstanceionException。如果我更改为method.invoke(myClass,“com.example.android.api”,new IPackageDataObserver.Stub(){public void on removeCompleted(字符串packageName,boolean successed)抛出RemoteException{Log.v(“info”,“success”);}});然后我得到一个异常,对象不是类的实例
您应该更改类myClass=class.forName(“android.content.pm.IPackageManager”)
因为IPackageManager是一个接口。检查后,您将了解为什么会得到InstanceionException。如何通过实例化实现IPackageManager接口的类来访问IPackageManager.AIDL中定义的这些方法。
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