0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
1

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

18.01.2016, 12:53. Показов 1169. Ответов 3
Метки нет (Все метки)

Есть метод, прослушивающий событие сервера по 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 секунды появляется (((((

В чём проблема?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2016, 12:53
Ответы с готовыми решениями:

Почему в iPhone не работает нажатие на телефонный номер, а в Android работает?
Здравствуйте! Почему если открыть на iPhone WEB сайт, на котором отображают телефонный номер для...

Динамический ScrollView работает в Unity, не работает в Android
Странная проблема. Есть scrollview. Заполняю его динамически префабами. В unity работает, все...

Прослушивание события клик
Привет всем, на странице есть несколько кнопок(их количество случайное). Ставлю их на прослушку...

Не работает Database Desktop
Парни задали лабу создать БД через Database Desktop только он не пашет у меня Delphi 7 может кто...

3
2882 / 2294 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.01.2016, 13:02 2
ничего не понятно
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
18.01.2016, 13:14 3
__romka_, permission-ы стоят? В каком потоке вызывается соединение?
0
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
19.01.2016, 10:08  [ТС] 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();
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2016, 10:08
Помогаю со студенческими работами здесь

Database desktop не работает
Вообщем если кто то сталкивался, помогите) Открываю Database desktop File&gt;New&gt;Table появляется...

Не работает Database Desktop
Здравствуйте! Сегодня начал изучать БД в Delphi. Хотел создать таблицу в Database Desktop, но при...

Прослушивание события сцены в загружаемом swf
Есть два swf-файла. Один файл подгружает другой swf-файл. Как сделать потомком первого swf ?

Не работает PostBack обработчик события с ЧПУ. Без ЧПУ работает
Хелп. Сам пишу на пхп, просто проект на АСП попался, решил поинтересоваться. Сделал на сайте ЧПУ с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru