Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
1

Приём сообщений от сервера в фоне

09.09.2016, 07:06. Просмотров 2664. Ответов 59
Метки нет (Все метки)

Привет, нужна помощь в структуре.
Первый раз работаю с подключением.
В общем к делу:
1.Отправляю запрос на сервер
2.У меня есть tabhost, инициализирую его с двумя классами, диалоги, и звонки.
3. Сейчас после запроса мне приходит ответ в виде Json строки, распарспарсиваю и заполняю как на скрине.

Вопрос собственно такой, мне нужно динамически отслеживать приходящую строку, так как после авторизации сервер будет мне отсылать сообщения с данными.

Как только прийдет сообщение мне нужно сразу обновить.

Я использую обычный Thread , AsyncTask не подходит так как он же выполняется один раз.

А мне нужно слушать на протяжение всей жизни приложения. Все бы нечего, но на слабых одноядерных с оперативой 512 жутко тормозит.

Обращаюсь сюда потому что нужен совет людей по опытней.

Так же я понял что нужно скорее всего использовать подключение в Service, и выводить уведомления с помощью Reciver. Но не знаю как применить это к моему коду.

Буду очень благодарен за помощь.
0
Миниатюры
Приём сообщений от сервера в фоне  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2016, 07:06
Ответы с готовыми решениями:

Получение сообщений от сервера без запроса
Среди существующих тем не нашёл ответа на свой вопрос, поэтому решил задать сам. Попытаюсь...

[Решено] STM32F4 приём CAN сообщений
На F4Dyscovery принимаю CAN сообщения. Иногда часть сообщений пропускаю. Переписал код так: void...

Приём сообщений методом POST
Некоторый клиент должен присылать PHP скрипту бинарный файл. Для этого он присылает http сообщение...

Приём сообщений без перезагрузки страницы
Делаю чат, расскажите о http://jsfiddle.net/bv5Kq/13 Как мне реализовать это? Лист сообщений...

MPI. Отправка/приём сообщений по тегам
Здравствуйте! Я написал простой код. Его суть заключается в следующем: Мастер выводит свой ранг...

59
REALIST07
Автор FAQ
Автор FAQ
195 / 194 / 21
Регистрация: 11.06.2010
Сообщений: 1,016
19.09.2016, 15:09 41
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
App.sendLocalBroadcastMessage("KEY_METHOD", "KEY_METHOD");
В action правильнее передавать такую строку: допустим пакет называется test.ru, а я хочу провести обновление основного activity, вызов будет таким:
Java
1
App.sendLocalBroadcastMessage("test.ru.REFRESH_MAIN_ACTIVITY", "какой-то параметр");
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
* * * * * * @Override
* * * * * * public void onReceive(Context context, Intent intent) {
* * * * * * * * int task = intent.getIntExtra("KEY_METHOD", 0);
* * * * * * Log.e("e","e"); // по сути должен был вывести в логах "e", нечего не выводит.
* * * * * * }
* * * * },in);
ты не показал, что хранится в переменной in, а в ней должна хранится строка выше: "test.ru.REFRESH_MAIN_ACTIVITY", то есть ты ловишь сообщение по фильтру этой строкой
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
19.09.2016, 15:51  [ТС] 42
REALIST07,
вот так же написано
Java
1
2
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
или нужно?
Java
1
2
3
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
in.addAction(); // и тут та строка о которой вы говорите?
0
REALIST07
Автор FAQ
Автор FAQ
195 / 194 / 21
Регистрация: 11.06.2010
Сообщений: 1,016
19.09.2016, 20:18 43
TonyBicbaev, заведи статическую переменную и пиши туда, чтобы не ошибиться,а в ресивере можно и так написать
Java
1
 new IntentFilter(Utils.ACTION_MESSAGE_UPDATE_STATE)
У тебя action строка не отражает действия, переменные должны быть осмысленными
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
20.09.2016, 06:10  [ТС] 44
REALIST07,

Java
1
2
3
4
5
6
7
8
9
  public static String MAIN_ACTIVIVTY = "com.chat.chat_v100.REFRESH_MAIN_ACTIVITY" ;
 LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int task = intent.getIntExtra("KEY_METHOD",0);
 
            Log.e("e","e" + task);
            }
        },new IntentFilter(MainActivity.MAIN_ACTIVIVTY));
и
Java
1
  App.sendLocalBroadcastMessage(MainActivity.MAIN_ACTIVIVTY, "KEY_METHOD");
не работает(

Добавлено через 4 минуты
REALIST07, может манифест? а вообще даже ошибок никаких не выдает. не знаю что делать.
попробовал по этому примеру, работает, ну и логика там проще.
http://startandroid.ru/ru/uroki/vse-...treceiver.html

Добавлено через 21 минуту
REALIST07, Аллилуйя это в манифесте. Ошибка строчка permission была.
ну все спасибо вам за помощь, буду реализовать все подключение.
0
Alexvp
20.09.2016, 09:35
  #45

Не по теме:

TonyBicbaev, ты не мучайся :) Быстрее и дешевле станет заказать разработку у REALIST07
Похоже, ты еще только въезжаешь в это дело, а у же замахнулся на сложный проект. Если это коммерческий проект, то ты гений продаж. Но бедный, бедный заказчик :)

0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
20.09.2016, 11:51  [ТС] 46
Alexvp, Лол) задание от конторы)
вообще нужно с чего то начинать учиться) это раз) Да я и не мучаюсь мне интересно)
Просто я тут один под android пишу и просить не у кого вот и все) я не дурак и стараюсь схватывать на лету) ну вот кстати разобрался) Весь графический интерфейс у меня готов, скажу там тоже не мало времени ушло разобраться с адаптерами и так далее) но мне нравиться разработка очень клёва)

REALIST07, а вообще вопрос
если я хочу отправить сразу в 2 активити, правильно же так будет?) или каждый в свой поток засунуть?)
Java
1
2
3
4
5
6
7
   App.sendLocalBroadcastMessage(MainActivity.MAIN_ACTIVIVTY, "KEY_METHOD");
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            App.sendLocalBroadcastMessageChats(DialogActivity.DIALOG_ACTIVITY,chatts);
                        }
                    }, 3000);
Добавлено через 57 секунд
REALIST07, прост хочу что бы все было более менее правильно)
0
REALIST07
Автор FAQ
Автор FAQ
195 / 194 / 21
Регистрация: 11.06.2010
Сообщений: 1,016
20.09.2016, 15:02 47
TonyBicbaev, прочитай про широковещательные сообщения в других источниках, а то ты не до конца понимаешь их суть, если тебе нужно подписаться в нескольких активити на одно и то же сообщение, то ты должен указать одинаковый new IntentFilter(MainActivity.MAIN_ACTIVIVTY)
1
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
20.09.2016, 15:53  [ТС] 48
REALIST07, а точно) туплю. спасибо
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
22.09.2016, 12:18  [ТС] 49
REALIST07, почему может выводить такое сообщение?
Java
1
2
3
4
5
6
7
8
09-22 10:59:14.334 13937-14399/? W/ActivityManager: Bad activity token: android.os.BinderProxy@100fbe1a
                                                    java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.android.server.am.ActivityRecord$Token
                                                        at com.android.server.am.ActivityRecord.forToken(ActivityRecord.java:367)
                                                        at com.android.server.am.ActivityRecord.isInStackLocked(ActivityRecord.java:1070)
                                                        at com.android.server.am.ActivityManagerService.getActivityOptions(ActivityManagerService.java:10838)
                                                        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:1673)
                                                        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2483)
                                                        at android.os.Binder.execTransact(Binder.java:446)
Добавлено через 5 часов 14 минут
REALIST07, а еще как мне пропусть активити регистрации(моментально)? через intent получается некрасивый переход
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 06:35  [ТС] 50
REALIST07, Столкнулся еще с такой проблемой, подскажите пожалуйста.
Когда сервис активен(это точно), и сокет не закрыт(тоже точно).
Я нажимаю отправить запрос, а он не отправляется. в чем может быть проблема? то есть ничего вообще не происходит, не ошибок соединения нечего, ответы с сервера перестают приходить. но сокет открыт.
Может в потоке дело?
0
vxg
Модератор
3283 / 2079 / 328
Регистрация: 13.01.2012
Сообщений: 8,079
28.09.2016, 08:44 51
TonyBicbaev, не засыпал ли телефон после подключения сокета?
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:30  [ТС] 52
vxg, в плане что экран гас? ну даже когда он вырубился сообщения шли.
на случай если сокет закроется у меня будет реконект сразу. но он не закрывался.

Добавлено через 6 минут
vxg, он может и час без перерыва проработать, а может, при авторизации уже не работать.
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:31  [ТС] 53
vxg, вот где пометил, это я нажал на кнопку отправить запрос, и все сколько не жми, будут эти 4 лога. на сервер тоже не приходит. Аппа не критует.
0
Миниатюры
Приём сообщений от сервера в фоне  
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 13:34  [ТС] 54
vxg, а может даже снова заработать через какое то время)) я вот вообще не пойму в чем дело, тока на поток думаю.
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 06:06  [ТС] 55
vxg, Карочи.
Сокет переходил в состояние "пред закрытое" и не закрывался. и не принимал сообщения.
0
vxg
Модератор
3283 / 2079 / 328
Регистрация: 13.01.2012
Сообщений: 8,079
30.09.2016, 06:42 56
TonyBicbaev, переходил когда?
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 08:35  [ТС] 57
vxg, когда запрос на сервер отправлял)
0
vxg
Модератор
3283 / 2079 / 328
Регистрация: 13.01.2012
Сообщений: 8,079
30.09.2016, 08:46 58
TonyBicbaev, нелогично. На причину не тянет
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 09:02  [ТС] 59
vxg, ну вот так, по сути должен был закрываться. сделал проверку на все подключения, когда проблема та случалась, заходил сюда mWebSocketClient.getConnection().isClosing().
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   if (mWebSocketClient.getConnection().isOpen()) {
                                mWebSocketClient.close();
                              
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
 
                            } else if (mWebSocketClient.getConnection().isClosed()) {
                               //должен был сюда заходить
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
                            } else if(mWebSocketClient.getConnection().isClosing())
                            {     Log.e("status ", "status  =isClosing()");
                                mWebSocketClient.close();
 
                                connectWebSocket("1.1.3#" + login + ";" + password + "|");
 
                            } else if(mWebSocketClient.getConnection().isConnecting())
                            {
                                Log.e("status ", "status  =isConnecting()");
                            }else  if(mWebSocketClient.getConnection().isFlushAndClose())
                            {
                                Log.e("status ", "status =isFlushAndClose()");
                            }
0
REALIST07
Автор FAQ
Автор FAQ
195 / 194 / 21
Регистрация: 11.06.2010
Сообщений: 1,016
30.09.2016, 17:46 60
Сервис должен уметь себя перезапустить если его прихлопнули в onTaskRemoved и перезапустить если понял, что соединение потеряно по каким-то причинам, как это реализовать - на ваше усмотрение
0
30.09.2016, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 17:46

Приём сообщения клиентом от сервера
Расскажи пожалуйста, как это правильно делается. я реализовал клиент, передачу на сервер он делает...

Прием сообщений от сервера
Здравствуйте, уважаемые форумчане! Такая проблема возникла. Пишу клиент-серверное приложение, в...

Ожидание сообщений от сервера
Здравствуйте, пишу многопользовательскую игру змейка на джава скрипте. Реализовано управление...


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

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

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