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

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

09.09.2016, 07:06. Просмотров 2409. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Приём сообщений от сервера в фоне (Программирование Android):

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

Приём СМС
Здравствуйте! Уже не первый день пытаюсь прочитать своим приложением входящее...

Приём данных по Bluetooth
Из Arduino посылается строка xx|xx|xx|xx|xx,xxxx|\n, где х-любое число. На...

Приём текста по Bluetooth. Ошибки в символах
Добрый день. Прошу особо не пинать. Вопрос чисто технический. Второй день...

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

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

59
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
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 / 1
Регистрация: 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
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
19.09.2016, 20:18 #43
TonyBicbaev, заведи статическую переменную и пиши туда, чтобы не ошибиться,а в ресивере можно и так написать
Java
1
 new IntentFilter(Utils.ACTION_MESSAGE_UPDATE_STATE)
У тебя action строка не отражает действия, переменные должны быть осмысленными
0
TonyBicbaev
3 / 3 / 1
Регистрация: 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 / 1
Регистрация: 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
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
20.09.2016, 15:02 #47
TonyBicbaev, прочитай про широковещательные сообщения в других источниках, а то ты не до конца понимаешь их суть, если тебе нужно подписаться в нескольких активити на одно и то же сообщение, то ты должен указать одинаковый new IntentFilter(MainActivity.MAIN_ACTIVIVTY)
1
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
20.09.2016, 15:53  [ТС] #48
REALIST07, а точно) туплю. спасибо
0
TonyBicbaev
3 / 3 / 1
Регистрация: 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 / 1
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 06:35  [ТС] #50
REALIST07, Столкнулся еще с такой проблемой, подскажите пожалуйста.
Когда сервис активен(это точно), и сокет не закрыт(тоже точно).
Я нажимаю отправить запрос, а он не отправляется. в чем может быть проблема? то есть ничего вообще не происходит, не ошибок соединения нечего, ответы с сервера перестают приходить. но сокет открыт.
Может в потоке дело?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
28.09.2016, 08:44 #51
TonyBicbaev, не засыпал ли телефон после подключения сокета?
0
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:30  [ТС] #52
vxg, в плане что экран гас? ну даже когда он вырубился сообщения шли.
на случай если сокет закроется у меня будет реконект сразу. но он не закрывался.

Добавлено через 6 минут
vxg, он может и час без перерыва проработать, а может, при авторизации уже не работать.
0
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:31  [ТС] #53
vxg, вот где пометил, это я нажал на кнопку отправить запрос, и все сколько не жми, будут эти 4 лога. на сервер тоже не приходит. Аппа не критует.
0
Миниатюры
Приём сообщений от сервера в фоне  
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 13:34  [ТС] #54
vxg, а может даже снова заработать через какое то время)) я вот вообще не пойму в чем дело, тока на поток думаю.
0
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 06:06  [ТС] #55
vxg, Карочи.
Сокет переходил в состояние "пред закрытое" и не закрывался. и не принимал сообщения.
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
30.09.2016, 06:42 #56
TonyBicbaev, переходил когда?
0
TonyBicbaev
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 08:35  [ТС] #57
vxg, когда запрос на сервер отправлял)
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
30.09.2016, 08:46 #58
TonyBicbaev, нелогично. На причину не тянет
0
TonyBicbaev
3 / 3 / 1
Регистрация: 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
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
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
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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