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

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

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

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

18.01.2016, 12:53. Просмотров 372. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Socket.io (прослушивание события работает на Desktop и не работает на Android) (Программирование Android):

Android.support.v4.app.FragmentActivity не работает в Android Studio - Программирование Android
объясните пожалуйста,как в андроид студио добавить вышеуказанную библиотеку,чтобы работало у меня вот это Активити package...

Socket Android Client and Java Socket Server - Программирование Android
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Socket подключение не работает в другой активности - Программирование Android
Проблемма такова: при передачи данных из первой активности не работает передача данных с второй активности и наоборот. После того как...

Не работает обработчик события кнопки - Программирование Android
Не могу разобраться почему выскакивает ошибка..пока только учусь...

Не работает Android Studio - Программирование Android
запускаю приложение, оно выполняется на тестовом смартфоне а в студии, в main.xml мобила становится серой, и ничего не работает ...

Не работает Android Studio - Программирование Android
Привет. Работало, более менее нормально, но я отформатировал диск С на своем компе и переустановил Studio. Теперь приложения не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,799
Завершенные тесты: 1
18.01.2016, 13:02 #2
ничего не понятно
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.01.2016, 13:14 #3
__romka_, permission-ы стоят? В каком потоке вызывается соединение?
0
__romka_
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 10:08
Привет! Вот еще темы с ответами:

Android, не работает регистрация - Программирование Android
Утром все было хорошо, потом делал правки разные - перестало работать! Потом вернулся к первоначальному ввиду (из репозитория), но все...

Не работает эмулятор Android - Программирование Android
Здравствуйте! Подскажите, пожалуйста, в чём может быть проблема. При запуске эмулятора, любого из созданных, выходит ошибка. ОС:...

Не работает genymotion в android studio - Программирование Android
Добрый день. Уже неделю пытаюсь запустить Genymotion в android studio. Установлено: Система Linux Mint 17 cinnamon 64-bit. ...

Android Studio, не работает эмулятор - Программирование Android
Здравствуйте. Недавно хотел заняться андроид- программированием. До этого обучался в Эклипс, еще совсем новичок.Скачал и установил Android...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.01.2016, 10:08
Ответ Создать тему
Опции темы

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