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

Виджеты, BroadcastReceiver и Строки - Android

Войти
Регистрация
Восстановить пароль
 
element111
0 / 0 / 0
Регистрация: 16.12.2014
Сообщений: 54
18.07.2016, 08:21     Виджеты, BroadcastReceiver и Строки #1
Здравствуйте. Занимаюсь созданием виджета. Делаю что то наподобие нажатия на кнопку. Использую Broadcast. Предполагается ,что после нажатия на определенную кнопку(в данном примере их 4), в экстра сохраняется какая то текстовая переменная и присваивается броадкаст сообщение. В зависимости от этого сообщения в StringBuilder записываю определенные экстра и передаю их виджету. Проблема в том, что StringBuilder не записывает эти экстрас по порядку. Например , есть 4 экстрас- 1,2,3,4 , мне необходима одна строка 1234, а у меня при каждом нажатии на кнопку выводится либо 1 либо 2 и тд. В чем ошибка, поставьте на путь истинный пожалуйста.
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
public void onReceive(Context context, Intent intent) {
        StringBuilder sb= new StringBuilder("");
        String msg="";
        super.onReceive(context, intent);
        //Ловим наш Broadcast, проверяем и выводим сообщение
        thisWidget = new ComponentName(context, MyWidget.class);
        RemoteViews view = new RemoteViews(context.getPackageName(),
                R.layout.widget);
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        final String action = intent.getAction();
 
        switch (action){
            case "ActionReceiverWidget":
                msg = intent.getStringExtra("msg1");
                sb.append(msg);
                break;
 
            case "ActionReceiverWidget2":
                msg = intent.getStringExtra("msg2");
                sb.append(msg);
                break;
 
            case "ActionReceiverWidget3":
                msg = intent.getStringExtra("msg3");
                sb.append(msg);
                break;
 
            case "ActionReceiverWidget4":
                msg = intent.getStringExtra("msg4");
                sb.append(msg);
                break;
        }
 
        view.setTextViewText(R.id.textView, sb.toString());
            manager.updateAppWidget(thisWidget,view);
            //Toast.makeText(context, msg4, Toast.LENGTH_SHORT).show();
 
        }
Добавлено через 8 часов 2 минуты
Странно то , что как только я произвожу операции с sb вне конструкции switch то все работает как нужно. Весь мозг сломал себе уже, не пойму , в чем дело
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
18.07.2016, 11:38     Виджеты, BroadcastReceiver и Строки #2
element111, зачем так заморачиваться, непонятно? Вы в разных классах события обрабатываете? Почему, в таком случае, у вас разные названия ключей для доп. параметров? Достаточно было всем присвоить одно, например, "msg". Почему вы решили, что туда передаётся "1234", а не "1"?
element111
0 / 0 / 0
Регистрация: 16.12.2014
Сообщений: 54
18.07.2016, 19:40  [ТС]     Виджеты, BroadcastReceiver и Строки #3
Класс один. разные ключи особой погоды не делают. мне нужно , что бы билдер пополнялся каждый раз и в итоге получалось 123 и тд, а билдер каждый раз новый как буд то создается
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
18.07.2016, 19:43     Виджеты, BroadcastReceiver и Строки #4
Цитата Сообщение от element111 Посмотреть сообщение
а билдер каждый раз новый как буд то создается
может потому что он объявлен в onRecieve и каждый раз пересоздается?
element111
0 / 0 / 0
Регистрация: 16.12.2014
Сообщений: 54
19.07.2016, 00:00  [ТС]     Виджеты, BroadcastReceiver и Строки #5
я его и в начале самого класса объявлял, все равно не получалось. Проблему решил кодом
Java
1
 if(sb==null) sb = new StringBuilder("");
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
19.07.2016, 10:09     Виджеты, BroadcastReceiver и Строки #6
Цитата Сообщение от element111 Посмотреть сообщение
я его и в начале самого класса объявлял, все равно не получалось.
Цитата Сообщение от element111 Посмотреть сообщение
public void onReceive(Context context, Intent intent) {
StringBuilder sb= new StringBuilder("");
Вам не кажется, что области видимости этих переменных отличаются?
Внутри процедуры используется совсем другая переменная sb, которая создаётся с нуля. Или невнимательность, или незнание базы.
element111
0 / 0 / 0
Регистрация: 16.12.2014
Сообщений: 54
19.07.2016, 18:15  [ТС]     Виджеты, BroadcastReceiver и Строки #7
Прошу прощения. Я код не совсем верный выложил, в этом , у меня билдер объявляется в onReceive. А я его объявлял и в самом начала класса, но билде все равно не работал как нужно. Помог код выше. Однако спустя какое то время билдер сам по себе обнуляется(или новый создается, не знаю), а минут через 10- 15 виджет вообще перестает реагировать на нажатия...есть идеи?
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
19.07.2016, 18:37     Виджеты, BroadcastReceiver и Строки #8
идеи есть
element111
0 / 0 / 0
Регистрация: 16.12.2014
Сообщений: 54
19.07.2016, 20:23  [ТС]     Виджеты, BroadcastReceiver и Строки #9
спасибо за сарказм, он очень помог мне в проблеме
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2016, 10:54     Виджеты, BroadcastReceiver и Строки
Еще ссылки по теме:

Уведомления в BroadcastReceiver Android
BroadcastReceiver, куда добавить код? Android
BroadcastReceiver + static переменная Android
BroadcastReceiver Android
Android BroadcastReceiver, считывание состояние телефона

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

Или воспользуйтесь поиском по форуму:
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
20.07.2016, 10:54     Виджеты, BroadcastReceiver и Строки #10
в какой проблеме? где полный код?
Yandex
Объявления
20.07.2016, 10:54     Виджеты, BroadcastReceiver и Строки
Ответ Создать тему
Опции темы

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