2012-06-22 2 views
1

Je suis confronté à une erreur lors de la liaison du service avec l'interface stub().Appel de service Android Bind Problème d'interface`

Voici mon code de connexion:

class LogConnection implements ServiceConnection { 

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

mais ca marche pas pour moi.

Logcat:

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 

EDIT: Je suivais l'exemple de lien ci-dessous:

Remote Service call

Quand je ne Débogage le code à ce moment-là, je frappé à la poste

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

J'espère que vous avez une solution.

S'il vous plaît laissez-moi savoir si vous voulez plus de données pour conclure sur la raison.

Répondre

0

Dans votre code, j'ai observé que c'est pourquoi vous lancez boundService sur IBinder, il n'y a pas besoin de le lancer juste passer comme il est. Ainsi, votre ligne devrait ressembler à ceci

logService = ILogService.Stub.asInterface(boundService); 

assurez-vous que le service écrit en même paquet ..

La classe où votre service extension juste créer objet de l'interface

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

et méthode onBind le renvoyer comme indiqué ci-dessous

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

Espoir cette explication fonctionne pour vous.

+0

non..J'ai le service de liaison dans un autre paquet ..Il ne fonctionne pas – NovusMobile

+0

poster du code C'est bien vous pouvez lier le service dans un autre paquet .. – MobileEvangelist