0

サービスを interface にバインド中にエラーが発生しましたstub()

ここに私の接続コードがあります:

class LogConnection implements ServiceConnection {

    public void onServiceConnected(ComponentName className,
            IBinder boundService) {
        logService = ILogService.Stub.asInterface((IBinder) boundService);
    }

しかし、それは私にとってはうまくいきません。

ログキャット:

06-22 12:17:28.632: I/dalvikvm(1973): Could not find method com.sam.logservice.ILogService$Stub.asInterface, referenced from method com.sam.logclient.LogClientActivity$LogConnection.onServiceConnected
06-22 12:17:28.662: W/dalvikvm(1973): VFY: unable to resolve static method 28: Lcom/sam/logservice/ILogService$Stub;.asInterface (Landroid/os/IBinder;)Lcom/sam/logservice/ILogService;
06-22 12:17:28.662: D/dalvikvm(1973): VFY: replacing opcode 0x71 at 0x0009
06-22 12:17:28.662: D/dalvikvm(1973): VFY: dead code 0x000c-0016 in Lcom/sam/logclient/LogClientActivity$LogConnection;.onServiceConnected (Landroid/content/ComponentName;Landroid/os/IBinder;)V
06-22 12:17:28.702: W/ActivityManager(61): Unable to start service Intent { cmp=com.sam.logclient/com.sam.logservice.ILogService }: not found

編集: 私は以下のリンクの例に従っています:

リモートサービスコール

その時のコードのデバッグをしたとき、同じ位置で打った

  logService = ILogService.Stub.asInterface((IBinder) boundService);

解決策があることを願っています。

より多くのデータで理由を結論付けたい場合はお知らせください。

4

1 に答える 1

0

あなたのコードでは、なぜboundServiceをIBinderにキャストしているのかを観察しました。実際には、そのまま渡すだけでキャストする必要はありません。したがって、行は次のようになります

  logService = ILogService.Stub.asInterface(boundService);

同じパッケージに書かれたサービスを確認してください..

拡張サービスがインターフェイスのオブジェクトを作成するだけのクラス

 ILogService.Stub logService = new ILogService.Stub();

そして onBind メソッドでは、以下に示すようにそれを返します

 @Override
    public IBinder onBind(Intent intent) {
        return logService;
    }

この説明が役に立てば幸いです。

于 2012-06-22T07:07:14.083 に答える