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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
__romka_
0 / 0 / 0
Регистрация: 08.09.2010
Сообщений: 25
#1

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

18.01.2016, 12:53. Просмотров 332. Ответов 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 секунды появляется (((((

В чём проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 12:53     Socket.io (прослушивание события работает на Desktop и не работает на Android)
Посмотрите здесь:
Socket Android Client and Java Socket Server Android
Socket подключение не работает в другой активности Android
Android Не работает обработчик события кнопки
Android Не работает Android Studio
Android Не работает Android Studio
Не работает эмулятор Android Android
Android Android, не работает регистрация
Android Android Studio, не работает эмулятор
Не работает genymotion в android studio Android
На Android 4.2.1 приложение работает; на версии 2.3 - вылетает Android
Android OnTouchListener не работает на низких версиях Android
Android кнопка “войти” работает только в главной активити (Navigation Drawer) Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
18.01.2016, 13:02     Socket.io (прослушивание события работает на Desktop и не работает на Android) #2
ничего не понятно
YuraAAA
1566 / 1308 / 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)
Ответ Создать тему
Опции темы

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