Форум программистов, компьютерный форум CyberForum.ru

Socket.io (прослушивание события работает на Desktop и не работает на Android) - Android

Восстановить пароль Регистрация
 
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
18.01.2016, 12:53     Socket.io (прослушивание события работает на Desktop и не работает на Android) #1
Есть метод, прослушивающий событие сервера по soket.io
(import io.socket.client.Ack;
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
)

вот метод:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private void refreshWS() throws URISyntaxException {
        IO.Options opts = new IO.Options();
        final Socket socket = IO.socket("http://aplikuha.ru", opts);
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Ack ack = new Ack() {
                    @Override
                    public void call(Object... os) {
                        for (Object obj : os) {
                            str += obj.toString();
                        }
                        str = "";
                    }
                };
                // Receiving an object
                socket.on("refresh", new Emitter.Listener() {
                    @Override
                    public void call(Object... os) {
                        for (Object obj : os) {
                            str += obj.toString();
                        }
                        System.out.println(str);
                        str = "";
                    }
                });
            }
 
        }).on("event", new Emitter.Listener() {   //event
 
            @Override
            public void call(Object... args) {
            }
 
        }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
 
            @Override
            public void call(Object... args) {
            }
 
        });
        socket.connect();
        System.out.println("callingR->refreshWS()");
 
    }
вот так вызываю:
Java
1
2
3
4
5
while (true){
            refreshWS();
            Thread.sleep(2000);
 
        }
Если собрать проект в netbeans и запустить метод, можно увидеть получение ответов сервера:
JSON
1
2
3
4
5
6
7
8
{"data":[{"data":{"likes_minus":1},"id":"385","type":"events"}]}
{"data":[{"data":{"likes_plus":1},"id":"385","type":"events"}]}
{"data":[{"data":{"likes_plus":11},"id":"377","type":"events"}]}
{"data":[{"id":"377","type":"comments"},{"data":{"comments":22},"id":"377","type":"events"}]}
{"data":[{"id":"377","type":"comments"},{"data":{"comments":23},"id":"377","type":"events"}]}
{"data":[{"data":{"likes_minus":2},"id":"385","type":"events"}]}
{"data":[{"data":{"likes_plus":2},"id":"385","type":"events"}]}
{"data":[{"data":{"likes_minus":3},"id":"385","type":"events"}]}
Если реализовать метод (с этими же библиотеками импорта), в андроид студии - в ответ тишина ((((((
В конце метода вставил "System.out.println("callingR->refreshWS()");"
И только эту строка каждые 2 секунды появляется (((((

В чём проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 12:53     Socket.io (прослушивание события работает на Desktop и не работает на Android)
Посмотрите здесь:

Прослушивание аудиопотока Android
Android Socket AndroiD
Android Не работает обработчик события кнопки
На Android 4.2.1 приложение работает; на версии 2.3 - вылетает Android
Android В listView работает int, но не работает int[]
Android Не работает Android Studio
Не работает БД Android
Не работает эмулятор Android Android
Socket подключение не работает в другой активности Android
Android Android, не работает регистрация
Android Android Studio, не работает эмулятор
Не работает genymotion в android studio Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
18.01.2016, 13:02     Socket.io (прослушивание события работает на Desktop и не работает на Android) #2
ничего не понятно
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.01.2016, 13:14     Socket.io (прослушивание события работает на Desktop и не работает на Android) #3
__romka_, permission-ы стоят? В каком потоке вызывается соединение?
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
19.01.2016, 10:08  [ТС]     Socket.io (прослушивание события работает на Desktop и не работает на Android) #4
В манифесте вот такой permission <uses-permission android:name="android.permission.INTERNET" />
Запускается в основном потоке.

Что интересно.
Соединение с этим же сервером для получения данных работает нормально. Аналогично SE (Desktop) версии.
Вот метод для получения данных:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public void getJsonFromsite() throws URISyntaxException {
        IO.Options opts = new IO.Options();
        final Socket socket = IO.socket("http://aplikuha.ru", opts);
        Date now = new Date();
 
 
        if (prefs.getBoolean("firstrun", true)) {
            curTime = Long.valueOf(1114475126);
        }
        else {
            curTime = new Long(now.getTime()/1000);
        }
 
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Ack ack = new Ack() {
                    @Override
                    public void call(Object... os) {
                        for (Object obj : os) {
                            str += obj.toString();
                        }
                        System.out.println(">>>>>> allRecords"+str);
 
                        try {
                            if (str.length()>5) {allJsonToDB(str);}
                        } catch (JSONException | InterruptedException | URISyntaxException e) {
                            e.printStackTrace();
                       }
                        str = "";
                    }
                };
 
 
                Emitter emit = socket.emit("getData", curTime, ack); //1114475126 (NOW   1450787442) 1450877304
            }
        }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
 
            @Override
            public void call(Object... args) {
            }
 
        });
        socket.connect();
    }
Добавлено через 1 час 11 минут
UPD.

Если вызвать этот метод в onCreate основного активити - он работает. Возвращает ответы сервера НО..... похоже блокирует UI. Экран телефона белый (((( Графические элементы не отображаются.

Добавлено через 19 часов 35 минут
Разобрался.
Дело в том, что у меня в этом же потоке есть метод получения новых записей и события на сервере надо было слушать в нём же:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public void getJsonFromsite() throws URISyntaxException {
        IO.Options opts = new IO.Options();
        final Socket socket = IO.socket("http://aplikuha.ru", opts);
        Date now = new Date();
 
 
        if (prefs.getBoolean("firstrun", true)) {
            curTime = Long.valueOf(1114475126);
        }
        else {
            curTime = new Long(now.getTime()/1000);
        }
 
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Ack ack = new Ack() {
                    @Override
                    public void call(Object... os) {
                        for (Object obj : os) {
                            str += obj.toString();
                        }
                        System.out.println(">>>>>> allRecords" + str);
                        try {
                            if (str.length() > 5) {
                                allJsonToDB(str);
                            }
                        } catch (JSONException | InterruptedException | URISyntaxException e) {
                            e.printStackTrace();
                        }
                        str = "";
                    }
                };
                Emitter emit = socket.emit("getData", curTime, ack); //1114475126 (NOW   1450787442) 1450877304
 
                /////////// слушаю событие "refresh"
                socket.on("refresh", new Emitter.Listener() {
                    @Override
                    public void call(Object... os) {
                        for (Object obj : os) {
                            str += obj.toString();
                        }
                        System.out.println("refresh --->"+str);
                        str = "";
                    }
                });
                   ///////////End of  слушаю событие "refresh"
 
            }
        }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
 
            @Override
            public void call(Object... args) {
            }
 
        });
        socket.connect();
    }
Yandex
Объявления
19.01.2016, 10:08     Socket.io (прослушивание события работает на Desktop и не работает на Android)
Ответ Создать тему
Опции темы

Текущее время: 08:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru