1

AllJoyn フレームワークを使用する Android アプリを構築しています。基本的に、ロビーを作成し、ロビーに参加している人々が特定のゲームをプレイできるようにするには、LAN 通信が必要です。

このために、オブジェクト Lobby とそれに対応する LobbyInterface を作成しました。私が今行ったことは次のとおりです。 - ユーザーはロビーを作成でき、これは接続されているすべてのデバイスのリストに表示されます。・ユーザーは作成したロビーを選択して参加することができます。

私が今欲しいのは、ユーザーがロビーに参加したときにリストを更新することです。このためには、ロビーにあるユーザー リストを取得する必要があります。このリストを LobbyInterface から取得しようとしています。バスを介して複雑なオブジェクトを取得できないことはわかっていますが (構造的に構築されていない場合)、文字列の単純な配列を取得しようとしています。

これは私のコードです:

LobbyClass:

    public class Lobby implements LobbyInterface, BusObject {
    private String[] lstUsers;
    private String name;

    public Lobby(String name){
        this.name = name;
        lstUsers = new String[4];
    }

    /**
    extra code here
    **/

    @Override
    public String[] getLstUsers() throws BusException {
        return lstUsers;
    }

}

LobbyInterface クラス:

@BusInterface(name = "com.example.cantor.pruebamultiplayerv3.lobby", announced = "true")
public interface LobbyInterface {


    @BusMethod(replySignature = "as")
    String[] getLstUsers() throws BusException;
}

これは、UsersFacade クラスから呼び出しているメソッドです。

public String[] getLstUsers(){
            try {
                Log.d(TAG, "USER could get users list");
                return lobbyI.getLstUsers();
            } catch (BusException e) {
                Log.d(TAG, "USER error getting users lst");
                e.printStackTrace();
            }
        return null;
    }

これは常に null を返し、エラーは次のとおりです。

04-23 21:09:47.327 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err: org.alljoyn.bus.ErrorReplyBusException: org.alljoyn.Bus.ErStatus
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at org.alljoyn.bus.ProxyBusObject.methodCall(Native Method)
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at org.alljoyn.bus.ProxyBusObject.access$300(ProxyBusObject.java:35)
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:264)
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at java.lang.reflect.Proxy.invoke(Proxy.java:397)
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at $Proxy2.getLstUsers(Unknown Source)
04-23 21:09:47.346 5864-5864/com.example.cantor.pruebamultiplayerv3 W/System.err:     at com.example.cantor.pruebamultiplayerv3.UsersFacade.getLstUsers(UsersFacade.java:70)

位置と型を指定して構造体を返すことができることを知っています。しかし、文字列の単純な配列で作業できることがわかりました: https://allseenalliance.org/docs/api/java/org/alljoyn/bus/annotation/Signature.html

ここで他の回答を読んでいますが、これらは次のような複雑なデータ用です: Alljoynフレームワークで署名がエラーを取得しますか?

コードの何が問題になっていますか? 代替案はありますか?

ご清聴ありがとうございました!

4

1 に答える 1