Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
1

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

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

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

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

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

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

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

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

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

Буду очень благодарен за помощь.
Миниатюры
Приём сообщений от сервера в фоне  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2016, 07:06
Ответы с готовыми решениями:

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

Асинхронные сокеты: Как организовать разделение на прием сообщений и прием файлов
Изучив синхронные сокеты, перешел к изучению асинхронных. Столкнулся вот с чем, как, используя...

Пример кода отправка и прием данных по bluetooth в сервисе, в фоне
Есть задача соединение по bluetooth в сервисе, прием и передача данных. В интернете есть примеры...

Отправка и прием сообщений
Здравствуйте! Мне нужно написать приложение, которое позволяло бы общаться его пользователям. При...

59
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
19.09.2016, 15:09 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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
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
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
19.09.2016, 20:18 43
TonyBicbaev, заведи статическую переменную и пиши туда, чтобы не ошибиться,а в ресивере можно и так написать
Java
1
 new IntentFilter(Utils.ACTION_MESSAGE_UPDATE_STATE)
У тебя action строка не отражает действия, переменные должны быть осмысленными
0
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/urok... eiver.html

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

Не по теме:

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

0
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
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
20.09.2016, 15:02 47
TonyBicbaev, прочитай про широковещательные сообщения в других источниках, а то ты не до конца понимаешь их суть, если тебе нужно подписаться в нескольких активити на одно и то же сообщение, то ты должен указать одинаковый new IntentFilter(MainActivity.MAIN_ACTIVIVTY)
1
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
20.09.2016, 15:53  [ТС] 48
REALIST07, а точно) туплю. спасибо
0
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
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 06:35  [ТС] 50
REALIST07, Столкнулся еще с такой проблемой, подскажите пожалуйста.
Когда сервис активен(это точно), и сокет не закрыт(тоже точно).
Я нажимаю отправить запрос, а он не отправляется. в чем может быть проблема? то есть ничего вообще не происходит, не ошибок соединения нечего, ответы с сервера перестают приходить. но сокет открыт.
Может в потоке дело?
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
28.09.2016, 08:44 51
TonyBicbaev, не засыпал ли телефон после подключения сокета?
0
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:30  [ТС] 52
vxg, в плане что экран гас? ну даже когда он вырубился сообщения шли.
на случай если сокет закроется у меня будет реконект сразу. но он не закрывался.

Добавлено через 6 минут
vxg, он может и час без перерыва проработать, а может, при авторизации уже не работать.
0
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 11:31  [ТС] 53
vxg, вот где пометил, это я нажал на кнопку отправить запрос, и все сколько не жми, будут эти 4 лога. на сервер тоже не приходит. Аппа не критует.
Миниатюры
Приём сообщений от сервера в фоне  
0
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
28.09.2016, 13:34  [ТС] 54
vxg, а может даже снова заработать через какое то время)) я вот вообще не пойму в чем дело, тока на поток думаю.
0
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 06:06  [ТС] 55
vxg, Карочи.
Сокет переходил в состояние "пред закрытое" и не закрывался. и не принимал сообщения.
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
30.09.2016, 06:42 56
TonyBicbaev, переходил когда?
0
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 133
30.09.2016, 08:35  [ТС] 57
vxg, когда запрос на сервер отправлял)
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
30.09.2016, 08:46 58
TonyBicbaev, нелогично. На причину не тянет
0
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
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
30.09.2016, 17:46 60
Сервис должен уметь себя перезапустить если его прихлопнули в onTaskRemoved и перезапустить если понял, что соединение потеряно по каким-то причинам, как это реализовать - на ваше усмотрение
0
30.09.2016, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2016, 17:46
Помогаю со студенческими работами здесь

Прием почтовых сообщений
Нашел такой код сделал тестовый почтовый ящик и решил попробовать: procedure...

Прием сообщений IdIRC
Здравствуйте. Как сделать прием сообщений? IdIRC. Коннект идет по кнопке...

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru