10

クライアントがAndroidが提供するIPCの通常のメカニズムでログオンできるリモートサービスを作成しましたが、バインディングは機能しているようです。この「奇妙な」例外が発生するため、オブジェクトをパラメーターとして渡さなければならないメソッドを呼び出すと、問題が発生します。

10-19 15:09:04.601: ERROR/AndroidRuntime(2985): FATAL EXCEPTION: main  
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): java.lang.NullPointerException  
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): at android.os.Parcel.readException(Parcel.java:1253)   
10-19 15:09:04.601: ERROR/AndroidRuntime(2985):at android.os.Parcel.readException(Parcel.java:1235)  
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): at it.domod.commons.interfaces.DeviceManager$Stub$Proxy.sendCommand(DeviceManager.java:121)

.aidlファイルから生成されたプロキシクラスからスローされたようです。

さらに奇妙なことに、オブジェクトは正しく渡されたように見えますが、おそらく周りに何か問題があります。何か案が?

4

1 に答える 1

11

私もこの問題に遭遇していて、少し調べてみると問題が見つかりました。他の人が同じボートで漂流しているのを見つけた場合に備えて、解決策を投稿します。

まず、リモートサービスでデバッグを有効にしない限り、Eclipseではリモートスレッドのデバッグは機能しません。これを行うには、アプリを実行し、サービスをバインドする最初のアクティビティにブレークポイントを設定する必要がありました。サービスが起動して実行されたら、EclipseでDDMSウィンドウを開き、リモートスレッドを選択して、デバッグボタンを押します。これで、Javaウィンドウに戻って、ブレークポイントをリモートサービスに追加し、それらをトリガーすることができます。

そこから、私の問題は、実際にはリモートプロセスのスタブ関数でnullポインターオブジェクトを操作しようとしていたことであり、nullpointerexceptionのパーセル例外が返され、この元の質問が何を求めているように見えるかがわかりました。約。

私の解決策は、オブジェクトを使用する前に、オブジェクトがnullではないことをテストすることでした:)

つまり、スタブ関数の実装で期待するように、「if」ステートメントを追加しました。

if( myobject != null )
{
   myobject.dosomething() 
}
于 2011-05-24T13:54:18.997 に答える