Emitter.Listener не запускается при запросе pu sh с сервера в Socket.io Android - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно реализовать веб-сокет в моем приложении android. Я использую Socket.io для этой цели

Моя задача - когда мое приложение запускается, мне нужно вызвать Socket.emit для получения статуса обновления пользовательского объекта, который уже вошел в систему, и я нужно вызвать Socket. Так я могу получать каждый раз, когда сервер pu sh что-то после изменения в User Object. мой код

SocketIo.class

public class SocketIO {

private static Socket socketIO;

private SocketIO() {
}  //private constructor.

public static Socket getInstance() {
    if (socketIO == null) { //if there is no instance available... create new one
//            socketIO = new SocketIO();

        try {
            socketIO = IO.socket("https://stay-safe-api.azurewebsites.net/");
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    return socketIO;
}
}

MainActivity.class

onCreate{

  SocketIO.getInstance().emit("online", json);
    SocketIO.getInstance().on("refresh_user_data", onNewMessage);

    SocketIO.getInstance().connect();
}

  private Emitter.Listener onNewMessage = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {


        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                Log.e("onNewMessage:- ", args[0].toString()); //Log to check incoming message
                try {
                    object = new JSONObject(args[0].toString());
                    Gson gson = new Gson();
                    RegisterData updatedUserInfo = gson.fromJson(String.valueOf(object), 
                    RegisterData.class);
                    Constant.userInfo = updatedUserInfo;
                    Toast.makeText(MainActivity.this, Constant.userInfo.getHealthScore() + "", 
                    Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }
};

Проблема возникает в первый раз, когда приложение открывается, я получил данные в Listener и делаю мой функционал. Но когда сервер помещает некоторые данные в этот сокет для клиентской стороны, мой сокет не работал. он обновляется только тогда, когда я уничтожаю свое приложение и открываю его снова. Это означает, что Emit.Listener работает только в первый раз.

Я просто новичок в этом и не знаю, что я делаю не так и что мне делать. Если у вас есть какой-либо образец проекта, который постоянно прослушивает серверную часть моего приложения всякий раз, когда сервер отправляет какие-либо данные, поэтому я обновляю пользовательский интерфейс своего мобильного приложения, а затем дайте мне знать или любой рабочий проект сокета.

...