Ошибка AllJoyn BusSignalReply

Я создаю приложение для Android, использующее AllJoyn Framework. По сути, мне нужна связь по локальной сети, чтобы создавать лобби и позволять людям, присоединившимся к ним, играть в определенную игру.

Для этого я создал объект 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;
    }

}

Класс лобби-интерфейса:

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

Это всегда возвращает ноль, и ошибка:

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?

Что не так с моим кодом? Любые альтернативы?

Спасибо вам большое за ваше внимание!


person Aliara    schedule 23.04.2016    source источник


Ответы (1)


Ничего... Я только что нашел ошибку. Я работал с пустым списком (у некоторых слотов был нуль, так как я пытался заполнить список). Я заполнил его пустыми строками, и теперь он работает...

public Lobby(String name){
        this.name = name;
        lstUsers = new String[4];
        for (int i = 0; i <=3; i++){
            lstUsers[i] = "";
        }
    }
person Aliara    schedule 23.04.2016