2017-04-07 12 views
0

AllJoynでプロパティを使用するのに苦労しています。私はAllJoynには新しいですが、プログラミングには興味がありません。私はC++書かれたプロバイダを持っていて、そのコールステータスがER_OKに等しい後、私はJavaからAllJoynプロパティを呼び出すと、AnnotationBusExceptionが発生する

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

を使用して、私のプロパティを追加します。

は、私は次のようなインタフェースで、私のJavaのプロパティを定義します。

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

をしかし、私のように呼び出すことによって(アンドロイドStudioを使用してAndroidの)Javaでのプロパティを使用しようとすると:

String str = proxyInterface.getServerName(); 

私は次の例外を取得しておいてください。私はwronを

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.

何をしていますg?

アップデート:JavaのコンシューマからのC++プロバイダ

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

から

ServerData:

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; 
} 

UPDATE:私はのGradleのバージョンを切り替えるため残念ながら、可能ないないようです。私は現在2.3.1です。 2.1.3に切り替えると、ビルド中に次のエラーが発生します(私はすべての提案を試してみました):

残念ながら、私はgradleのバージョンを切り替えることはできません。私は現在2.3.1です。 2.1.3に切り替えると、ビルド中に次のエラーが発生します。 エラー:org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollectionをorg.gradle.api.internal.file.collections.DefaultConfigurableFileCollectionにキャストできません。 考えられる原因予期しないエラーがあります。

  • Gradleの依存関係キャッシュが壊れている可能性があります(ネットワーク接続のタイムアウト後に発生することがあります)。 依存関係を再ダウンロードしてプロジェクトを同期させます(ネットワークが必要)
  • Gradleのビルドプロセス。すべてのGradleデーモンを停止すると、この問題が解決される可能性があります。 Gradleビルドプロセスを停止します(再起動が必要です)
  • プロジェクトには、プロジェクトの他のプラグインまたはプロジェクトによって要求されたGradleのバージョンと互換性のないサードパーティのプラグインが使用されている可能性があります。
GRADELプロセスが破損している場合は、IDEを閉じてすべてのJavaプロセスを終了することもできます。

答えて

0

問題のServerDataフィールドがパブリックであり、各パブリックフィールドの直前で指定した@Position(n)アノテーションに誤字がないことを確認してください。


UPDATE:

のGradle 2.2.3でのAndroid Studioでビルドするとき、私はこの注釈のエラーメッセージを見てきました。しかし、私がgradle 2.1.3を使用して戻ったとき、注釈のエラーは消えてしまった。

トップレベルのbuild.gradleファイルを確認してください。そのクラスパスの依存関係を更新する...

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


UPDATE 2:

別の回避策、あなたはGradleの> 2.1.3とAndroidのメーカーに構築する必要がある場合は、アンドロイドStudioの "インスタント実行" 機能を無効にすることです。インスタントラン機能は、静的フィールドをクラスに自動的に2つ追加します(つまり、$ changeフィールドとserialVersionUIDフィールドを追加しています)。

AllJoyn Javaバインディングでの位置注釈の処理(リフレクションによって行われる)は、現在、これらの2つのフィールドがコンパイラによって追加されていることを考慮していません。これはAllJoynが今後の16.10aメンテナンスリリースでより良く扱われます)。

Androidのメーカー内で次の操作を行い、「インスタント実行」を無効にするには...

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

私はあなたが言っていることを聞きます。しかし、私が指摘したように、ServerDataはプロパティの呼び出しとは関係ありません。この構造体は使用されません。実際、ServerDataを使用する呼び出しは、呼び出しが呼び出される前に完全に正常に動作します。 –

+0

インタフェース定義とServerData定義をalljoynバスアノテーションに付けることはできますか? –

+0

Androidのプロパティサンプル(https://cgit.allseenalliance.org/core/alljoyn.git/tree/alljoyn_java/samples/android?h=RB16.04)をご覧ください。 contactsサンプルには、@Positionアノテーションを使用するデータクラスがあります。 –

関連する問題