2012-01-31 8 views
0

を呼び出すとき、私はリフレクションを使用しようとしていますが、メソッド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を取得し、二つのパラメータStringIPackageDataObserverを取ります。

私は正しいパラメータを渡していますか?

またはどのように問題を解決できますか?

デバッグ中の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) 

1月31日17:50:26.405:System.errの(969)/ W: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 
+0

'deleteClass'何android.content.pm.PackageManagerを意味してきた推測していますか?スタックトレースを表示します。 –

+0

申し訳ありませんが投稿を更新しました。 –

+0

スタックトレースを表示します。 NPEは 'clearApplicationUserData'の中に投げ込まれていますか?パラメータとしてnullをサポートしていない可能性が最も高いです。 –

答えて

1

IPackageManagerは、インターフェイス(「I」プレフィックスによって示唆されるように)です。リフレクションによってインターフェイスをインスタンス化することはできません。

私はあなたが

+0

(文字列のpackageName onRemoveCompleted私は(MyClassの、 "com.example.android.apis" をmethod.invokeに変更すると、新しいIPackageDataObserver.Stub(){ \t \t \t \t \t \t \t \t \t \t \t \t \t \tます。public void 、ブール値)が成功し \t \t \t \t \t \t \t \t \tは{ RemoteExceptionをスロー\t \t \t \t \t \t \tログ。v( "info"、 "sucess"); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t \t})。 'オブジェクトはクラスのインスタンスではないという例外が発生しています' –

+0

クラス myClass = Class.forName( "android.content.pm.IPackageManager"); 'を変更する必要があります.IPackageManagerはインタフェースであるためです。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#newInstance()を確認すると、なぜインスタンス化の例外が発生しているのかがわかります。 – asenovm

+0

IPackageMnager.aidl –

0
  1. あなたは
  2. はclearApplicationUserData()メソッドはIPackageDataObserverにnull値を処理するために知っていることを確認してください()myClass.newInstance()とないdeleteClass.newInstanceを呼び出す必要がありますように思えます。

希望します。

0

deleteClassとは何ですか? myClassであなたのメソッドを呼び出すべきではありませんか?

+0

申し訳ありませんが投稿を更新しました。 –

関連する問題