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

Разделить полученное SMS на разные TextView

17.03.2015, 16:55. Просмотров 610. Ответов 17
Метки нет (Все метки)

Здрасте.
Помогите с кодом. Решил удаленно следить за дачей, ну там отслеживание температуры на улице, в доме, может влажности воздуха, а также вкл. выкл. эл. отопления. Для решения задачи выбрал Ардуино. На андроид часть программы написал. Приложение умеет звонить, отправлять смс с нужным текстом и на нужный номер, а вот с приемом смс проблемы. Вернее принять то принимает и даже показывает в одном TextView. Но хотелось бы, что данные из одной смс отразились в разных TextView. Вот никак не могу разделить смс на несколько, чтоб поместить в разные TextView. Помогите кто чем может. С Ардуино принимаю вот такой текст: dom:-11.1;25;738;-22.2;40;on;
Кликните здесь для просмотра всего текста
Разделить полученное SMS на разные TextView
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2015, 16:55
Ответы с готовыми решениями:

Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел...

TextView txt = new TextView(this); - ошибка
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте...

В 1-ом числе обнулить 3, 5, 7 разряды, результат разделить на 4. Полученное значение умножить на 2-е число
нужна помощь вот такое решить:

Разделить все числа матрицы выше главной диагонали на полученное число
Дан двухмерный массив N5x5 трансформировать матрицу. Найти в матрице элемент х....

Разделить каждую цифру десятичной записи этого числа на его порядковый номер. Полученное число напечатать
#include <iostream> #include <conio.h> #include <math.h> #include...

17
androbro
343 / 303 / 68
Регистрация: 17.10.2014
Сообщений: 897
17.03.2015, 17:34 #2
Kipec, ну так разбивайте строку по разделителю ";" или RegExp Вам в помощь
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
17.03.2015, 17:35 #3
Kipec,
Java
1
2
3
4
5
6
7
8
9
 //SMS                   1    2   3    4    5  6
        String pipeline = "dom:-11.1;25;738;-22.2;40;on;";
        String split[] = pipeline.split(";");
        String one = split[0].split(":")[0];
        String two = split[1];
        String three = split[2];
        String four = split[3];
        String five = split[4];
        String six = split[5];
1
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
18.03.2015, 06:03  [ТС] #4
Цитата Сообщение от YuraAAA Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
//SMS 1 2 3  4  5 6
String pipeline = "dom:-11.1;25;738;-22.2;40;on;";
String split[] = pipeline.split(";");
String one = split[0].split(":")[0];
String two = split[1];
String three = split[2];
String four = split[3];
String five = split[4];
String six = split[5];
А не подскажите мне как все это прикрутить к моему варианту. Только не ругайтесь, я не тупой. Я только учусь.
Кликните здесь для просмотра всего текста
Разделить полученное SMS на разные TextView
Разделить полученное SMS на разные TextView
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
18.03.2015, 12:01 #5
Java
1
2
tv2.setText(two);
tv3.setText(three);
Что за привычка картинки постить?
0
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
18.03.2015, 16:21  [ТС] #6
Огромное спасибо за подсказки, но при получении смс в TextView попадают значения из 11 строки String pipeline. А хотелось бы что бы TextView попадали значения из приходящей смс. И у меня нет привычки постить картинки, я только один раз и уже исправился.)))
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
public class MainActivity extends Activity {
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Получите дополнительные данные
        Bundle extras = getIntent().getExtras(); 
        String address = extras.getString("address");
        String message = extras.getString("message");
        
        String pipeline = "dom:-11.1;25;738;-22.2;40;on;";
        String split[] = pipeline.split(";");
        String one = split[0].split(":")[0];
        String two = split[1];
        String three = split[2];
        String four = split[3];
        String five = split[4];
        String six = split[5];
 
        TextView addresstv = (TextView) findViewById(R.id.addresstv);
        TextView messagetv = (TextView) findViewById(R.id.messagetv);
        
        TextView tv1 = (TextView) findViewById(R.id.one);
        TextView tv2 = (TextView) findViewById(R.id.two);
        TextView tv3 = (TextView) findViewById(R.id.three);
        TextView tv4 = (TextView) findViewById(R.id.four);
        TextView tv5 = (TextView) findViewById(R.id.five);
        TextView tv6 = (TextView) findViewById(R.id.six);
        
        tv1.setText(one);
        tv2.setText(two);
        tv3.setText(three);
        tv4.setText(four);
        tv5.setText(five);
        tv6.setText(six);
        
        messagetv.setText(message);
        addresstv.setText(address);
    }}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SmsReceiver extends BroadcastReceiver {
    
    @Override
    public void onReceive(Context ctx, Intent intent) {
        Bundle bundle = intent.getExtras();        
        Object[] pdus = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < messages.length; i++){
            messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
            if (messages[i].getDisplayOriginatingAddress().contains("1028")) {
            Intent newintent = new Intent(ctx, MainActivity.class);
            newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);         
            // Проход в данных
            newintent.putExtra("address", messages[i].getDisplayOriginatingAddress());
            newintent.putExtra("message", messages[i].getDisplayMessageBody());
            ctx.startActivity(newintent);         
            } } } 
    }
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
18.03.2015, 17:51 #7
Цитата Сообщение от Kipec Посмотреть сообщение
String split[] = pipeline.split(";");
замените на
Java
1
String split[] = message.split(";");
а переменную pipeline вообще сотрите
1
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
18.03.2015, 18:57  [ТС] #8
Огромное всем спасибо за предоставленную информацию и направления меня в правильную сторону. Все получилось.
0
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
20.03.2015, 06:51  [ТС] #9
Всем привет! Как я и писал выше разделитель работает. Только вот не совсем как то правильно. Из входящей смс "dom:-11.1;25;738;-22.2;40;on;" он выкидывает первое значение "-11.1", а заместо его вставляет "dom". Потом "25;738;-22.2;40;on;" как и положено. Зачем так происходит я не допрыгиваю, что делать с этим подскажите.
Кликните здесь для просмотра всего текста
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
public class MainActivity extends Activity {
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Получите дополнительные данные
        Bundle extras = getIntent().getExtras(); 
        String message = extras.getString("message");
        
        //sms                   1       2   3   4   5   6   
        //String pipeline = "dom:-11.1;25;738;-22.2;40;on;";
        String split[] = message.split(";");
        String one = split[0].split(":")[0];
        String two = split[1];
        String three = split[2];
        String four = split[3];
        String five = split[4];
        String six = split[5];
        
        TextView tv1 = (TextView) findViewById(R.id.one);
        TextView tv2 = (TextView) findViewById(R.id.two);
        TextView tv3 = (TextView) findViewById(R.id.three);
        TextView tv4 = (TextView) findViewById(R.id.four);
        TextView tv5 = (TextView) findViewById(R.id.five);
        TextView tv6 = (TextView) findViewById(R.id.six);
        
        tv1.setText(one);
        tv2.setText(two);
        tv3.setText(three);
        tv4.setText(four);
        tv5.setText(five);
        tv6.setText(six);
 
    }}
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 08:36 #10
Цитата Сообщение от Kipec Посмотреть сообщение
Зачем так происходит я не допрыгиваю
Java
1
String one = split[0].split(":")[1];
1
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
20.03.2015, 17:27  [ТС] #11
Всем привет. Я представляю как надоел с тупыми вопросами. Потерпите еще немного. Делема такая. Вот есть код который представленный ниже и он не работает. Есть с 17 по 49 строки которые отдельно работают. Без них оставшаяся часть программы работает все принимает, запускает. Как только я добавляю с 17 по 49 строки все эпикфейл она даже не запускается. Прям ваще. Я нерв уже. Что делать? Допускаю что не туда воткнул эти строки, но когда тест делаю отдельно, они размещаются в этом же методе.
Кликните здесь для просмотра всего текста
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
public class MainActivity extends Activity {
    
    //определяем View - элементы
        EditText callNumber;
        Button button_zapros;
        Button button_save;
        SharedPreferences sPref;
        final String SAVED_TEXT = "saved_text"; 
        PendingIntent sentPI;// PendingIntent, сказать смс-ок сообщить нам
        String SENT = "SMS_SENT";// Цель действие, которое мы используем
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.primary);
    
        // Получите дополнительные данные
        Bundle extras = getIntent().getExtras(); 
        String message = extras.getString("message");
        
        //sms                   1       2   3   4   5   6   
        //String pipeline = "dom:-11.1;25;738;-22.2;40;on;";
        String split[] = message.split(";");
        String one = split[0].split(":")[1];
        String two = split[1];
        String three = split[2];
        String four = split[3];
        String five = split[4];
        String six = split[5];
        String seven = split[6];
        String eight = split[7];
        
        TextView tv1 = (TextView) findViewById(R.id.TextView1);
        TextView tv2 = (TextView) findViewById(R.id.TextView2);
        TextView tv3 = (TextView) findViewById(R.id.TextView3);
        TextView tv4 = (TextView) findViewById(R.id.TextView4);
        TextView tv5 = (TextView) findViewById(R.id.TextView5);
        TextView tv6 = (TextView) findViewById(R.id.TextView6);
        TextView tv7 = (TextView) findViewById(R.id.TextView7);
        TextView tv8 = (TextView) findViewById(R.id.TextView8);
        
        tv1.setText(one);
        tv2.setText(two);
        tv3.setText(three);
        tv4.setText(four);
        tv5.setText(five);
        tv6.setText(six);
        tv7.setText(seven);
        tv8.setText(eight);
        
        //Создаем the Pending Intent
        sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
        
        //находим View - элементы для кнопок
        callNumber = (EditText) findViewById(R.id.callNumber);
        button_zapros = (Button) findViewById(R.id.button_zapros);
        button_save = (Button)findViewById(R.id.button_save);
        
        //создание обработчика для кнопок
        OnClickListener oclBtn = new OnClickListener () {
        public void onClick(View v) {
            //по id определяем кнопку, вызвавшую этот обработчик
            switch (v.getId()){
                case R.id.button_zapros:
                    Toast.makeText(getBaseContext(), "Нажата кнопка Запрос", Toast.LENGTH_SHORT).show();
                    if (callNumber != null) {
                        String number = String.format("tel:%s", callNumber.getText().toString());
                    // Сразу звонит
                        Uri callUri = Uri.parse(number);
                        Intent callIntent= new Intent(Intent.ACTION_CALL, callUri);
                    startActivity(callIntent);}
                    break;
                case R.id.button_save:
                    saveText();
                    break;
 
                default:
                    break;
                    }}};
    
    //обработчик для кнопок
    button_zapros.setOnClickListener(oclBtn);
    button_save.setOnClickListener(oclBtn);
    loadText();
    }
 
    void saveText() {
        sPref = getPreferences(MODE_PRIVATE);
        Editor ed = sPref.edit();
        ed.putString(SAVED_TEXT, callNumber.getText().toString());
        ed.commit();
        Toast.makeText(this, "Номер сохранен", Toast.LENGTH_SHORT).show();
    }
    void loadText() {
        sPref = getPreferences(MODE_PRIVATE);
        String savedText = sPref.getString(SAVED_TEXT, "");
        callNumber.setText(savedText);
        Toast.makeText(this, "Номер загружен", Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy() {
        saveText();
        super.onDestroy();
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 18:24 #12
Что работает, что не работает? Логи где?
0
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
20.03.2015, 18:52  [ТС] #13
Как то так
Кликните здесь для просмотра всего текста
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
03-20 15:45:48.403: E/AndroidRuntime(276): FATAL EXCEPTION: main
03-20 15:45:48.403: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hr/com.example.hr.MainActivity}: java.lang.NullPointerException
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.os.Looper.loop(Looper.java:123)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread.main(ActivityThread.java:4627)
03-20 15:45:48.403: E/AndroidRuntime(276):  at java.lang.reflect.Method.invokeNative(Native Method)
03-20 15:45:48.403: E/AndroidRuntime(276):  at java.lang.reflect.Method.invoke(Method.java:521)
03-20 15:45:48.403: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-20 15:45:48.403: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-20 15:45:48.403: E/AndroidRuntime(276):  at dalvik.system.NativeStart.main(Native Method)
03-20 15:45:48.403: E/AndroidRuntime(276): Caused by: java.lang.NullPointerException
03-20 15:45:48.403: E/AndroidRuntime(276):  at com.example.hr.MainActivity.onCreate(MainActivity.java:37)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-20 15:45:48.403: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-20 15:45:48.403: E/AndroidRuntime(276):  ... 11 more
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 21:35 #14
37 строчка в классе MainActivity.
1
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
22.03.2015, 18:02  [ТС] #15
Еще раз Здрасте!
В продолжение темы. С ошибкой разобрался, теперь все запускается.
Java
1
Bundle extras = getIntent().getExtras();
Вынес с onCreate в onResume.
Только вот есть небольшой нюанс. Когда приложение запущено и на него приходит смс, то происходит новый как я понимаю запуск приложения и данные в нем обновляются. А можно сделать так что бы приложение не запускалось, а просто данные обновлялись. Здесь как у меня получилось.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
    protected void onResume() {
        super.onResume();
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
        String message = extras.getString("message");
        String split[] = message.split(";");
        String one = split[0].split(":")[1];
        String two = split[1];
 
 
            TextView tv1 = (TextView) findViewById(R.id.TextView1);
            TextView tv2 = (TextView) findViewById(R.id.TextView2);
 
 
        tv1.setText(one);
        tv2.setText(two);
 
    }}
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
22.03.2015, 19:17 #16
Цитата Сообщение от Kipec Посмотреть сообщение
Вынес с onCreate в onResume.
Смысл?
Цитата Сообщение от Kipec Посмотреть сообщение
А можно сделать так что бы приложение не запускалось, а просто данные обновлялись.
Сохраняете данные в файл, при запуске приложение считывает данные.
0
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
22.03.2015, 19:52  [ТС] #17
Сохраняете данные в файл, при запуске приложение считывает данные.
Так и сделал, но у меня BroadcastReceiver запускает приложение при входящей смс и данные с смс не приходят потому что данные загружаются сохраненые. И когда приложение запущено то же самое. Из-за перезапуска.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
22.03.2015, 20:15 #18
Пользуйте сервис, какие проблемы.
0
22.03.2015, 20:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2015, 20:15

Преобразовать исходную матрицу по правилу: четные строки разделить на полученное значение, нечетные оставить без изменения.
Для заданной квадратной матрицы сформировать одномерный массив из ее...

Найти сумму элементов массива и разделить каждый элемент исходного массива на полученное значение
Почему обработанный массив имеет вид: 0 0 0 0? using System; using...

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


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

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

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