Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Kipec
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
#1

Разделить полученное SMS на разные TextView - Программирование Android

17.03.2015, 16:55. Просмотров 596. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разделить полученное SMS на разные TextView (Программирование Android):

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

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

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

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

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

Разделить каждую цифру десятичной записи этого числа на его порядковый номер. Полученное число напечатать - C++
#include <iostream> #include <conio.h> #include <math.h> #include <windows.h> using namespace std; double k, newd, numDig,...

17
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 886
17.03.2015, 17:34 #2
Kipec, ну так разбивайте строку по разделителю ";" или RegExp Вам в помощь
0
YuraAAA
1578 / 1319 / 271
Регистрация: 25.10.2009
Сообщений: 3,437
Записей в блоге: 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,072
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 / 271
Регистрация: 25.10.2009
Сообщений: 3,437
Записей в блоге: 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,072
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,072
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,072
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
22.03.2015, 18:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2015, 18:02
Привет! Вот еще темы с ответами:

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

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

Дано число. Разделить каждую цифру десятичной записи этого числа на его порядковый номер. Полученное число нап - C++
2.Дано число. Разделить каждую цифру десятичной записи этого числа на его порядковый номер. Полученное число напечатать. #include...

Разделить экран двумя диагоналями на четыре части и закрасить их в разные цвета - Turbo Pascal
Разделить экран двумя диагоналями на четыре части и закрасить их в разные цвета.


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

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

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