2017-04-07 2 views
0

Je suis confronté à l'utilisation de propriétés dans AllJoyn. Je suis nouveau à AllJoyn mais pas à la programmation. J'ai un fournisseur écrit C++ et j'ajoute mes propriétés en utilisantL'appel d'une propriété AllJoyn à partir de Java provoque une exception AnnotationBus

status = m_Description->AddProperty("ServerName", "s", 1) 

Après que l'état d'appel est égal à ER_OK.

je définis mon Java propriété dans l'interface comme suit:

@BusProperty(annotation = BusProperty.ANNOTATE_EMIT_CHANGED_SIGNAL) 
String getServerName() throws BusException; 

Cependant, lorsque je tente d'utiliser la propriété dans Java (Android Android Studio) en faisant l'appel comme:

String str = proxyInterface.getServerName(); 

Je continue à recevoir l'exception suivante:

04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: org.alljoyn.bus.AnnotationBusException: field public static transient volatile com.android.tools.fd.runtime.IncrementalChange com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData.$change of class com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData does not annotate position 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.structTypes(Signature.java:71) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.classTypeSig(Signature.java:170) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.typeSig(Signature.java:117) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.getOutSig(InterfaceDescription.java:511) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.addMembers(InterfaceDescription.java:386) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.create(InterfaceDescription.java:199) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.addInterface(ProxyBusObject.java:115) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.getProperty(Native Method) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.access$400(ProxyBusObject.java:35) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:274) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:397) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at $Proxy4.getServerRunning(Unknown Source) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Interfaces.ICumulusImpl.IsRunning(ICumulusImpl.java:24) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Handlers.BusHandler.processMessage(BusHandler.java:276) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Abstracts.PauseHandler.handleMessage(PauseHandler.java:75) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.os.Handler.dispatchMessage(Handler.java:111) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.os.Looper.loop(Looper.java:194) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5567) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Method.invoke(Native Method) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)

Note: I do have a method that has a return value of ServerData. However, that is not what I'm calling when this error occurs. I sucessfully make that call long before trying to call the method. It is the method call that causes this exception. However, I do have ServerData annotated with @Position(x) for each field number 0-4.

Qu'est-ce que je fais wron g?

Mise à jour:

ServerData de C++ fournisseur

class ServerData { 
    public: 
     const char* Id; 
     const char* Name; 
     const char* Version; 
     const char* MachineName; 
     const char* BaseUrl; 
    }; 

De Java Consumer:

public class ServerData { 
    @Position(0) 
    @Signature("s") 
    public String Id; 

    @Position(1) 
    @Signature("s") 
    public String Name; 

    @Position(2) 
    @Signature("s") 
    public String Version; 

    @Position(3) 
    @Signature("s") 
    public String MachineName; 

    @Position(4) 
    @Signature("s") 
    public String BaseURL; 
} 

MISE À JOUR: Malheureusement, cela ne me semble pas possible de basculer version de gradle. Je suis actuellement sur 2.3.1; passer à 2.1.3 provoque l'erreur suivante lors de la construction (j'ai essayé toutes les suggestions listées):

Malheureusement, cela ne me semble pas possible de changer de version de gradle. Je suis actuellement sur 2.3.1; le passage à 2.1.3 provoque l'erreur suivante lors de la construction: Erreur: org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection ne peut pas être jeté à org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection Les causes possibles erreur inattendue:

  • Le cache des dépendances de Gradle est peut-être corrompu (parfois après un délai de connexion réseau). Re-télécharger les dépendances et synchroniser le projet (nécessite un réseau)
  • L'état d'un processus de compilation Gradle (démon) est peut-être corrompu . L'arrêt de tous les démons Gradle peut résoudre ce problème. Stop Gradle build processes (nécessite un redémarrage)
  • Votre projet utilise peut-être un plugin tiers qui n'est pas compatible avec les autres plugins du projet ou la version de Gradle demandée par le projet.
Dans le cas des processus Gradle corrompus, vous pouvez également essayer de fermer l'IDE et de tuer tous les processus Java.

Répondre

0

Assurez-vous que les champs ServerData en question sont publics et qu'il n'y a aucune faute de frappe dans les annotations @Position (n) que vous avez spécifiées immédiatement avant chaque champ public.


MISE À JOUR:

Je l'ai vu ce message d'erreur Annotation lors de la construction dans Android Studio avec gradle 2.2.3. Cependant, quand je suis retourné à l'utilisation de la gradule 2.1.3, l'erreur d'annotation a disparu.

Vérifiez votre fichier build.gradle de niveau supérieur. Mettez à jour sa dépendance de classpath pour être ...

dependencies { classpath 'com.android.tools.build:gradle:2.1.3' }


MISE À JOUR 2:

Une autre solution, si vous avez besoin de construire dans Android Studio avec gradle> 2.1.3, est de désactiver la fonction "run instantanée" Android Studio. La fonction d'exécution instantanée ajoute automatiquement deux champs statiques publics aux classes (c'est-à-dire qu'elle ajoute le champ $ change et le champ serialVersionUID).

Le traitement des annotations de position par AllJoyn java-binding (effectué par réflexion) ne tient actuellement pas compte de l'ajout de ces deux champs par le compilateur. Cela sera mieux géré par AllJoyn dans sa prochaine version de maintenance 16.10a).

Pour désactiver "run instant", procédez comme suit dans les applications studio ...

Open the Settings or Preferences dialog.
Navigate to Build, Execution, Deployment > Instant Run.
Uncheck the "Enable Instant Run to hot swap/resource changes on deploy" checkbox.

+0

Je comprends ce que vous dites. Cependant, comme je l'ai noté, ServerData n'a rien à voir avec l'appel à la propriété. Il n'utilise pas cette structure et en fait, l'appel qui utilise ServerData fonctionne parfaitement bien avant l'appel de la propriété. –

+0

Pouvez-vous fournir la définition d'interface et la définition ServerData avec les annotations de bus alljoyn? –

+0

Vous pouvez consulter l'exemple de propriétés Android (https://cgit.allseenalliance.org/core/alljoyn.git/tree/alljoyn_java/samples/android?h=RB16.04). Alors que l'échantillon de contacts a une classe de données qui utilise l'annotation @Position. –