Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Ошибка присваивания switch значения полученного от сервера

Всем привет, делаю приложение для управления микроконтроллером (МК)...
При запуске приложение отправляет запрос на МК, после чего получает ответ (json), собственно вопрос вот в чём-
из ответа нужно получить значение нужного ключа и по этому значению выставить состояние switch в приложений...
Но при запуске приложения оно сразу же вылетает, как я понял проблема в
Java
1
switch1.setChecked(true);
Если убрать эту строку и поставить к примеру вывод какого то текста в поле, всё работает.
Вот код:
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
OkHttpClient client = new OkHttpClient();
 
        Request request = new Request.Builder()
                .url("http://192.168.4.1/json")
                .build();
 
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }
 
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.isSuccessful()){
                    try {
                        JSONObject jsonObject = new JSONObject(response.body().string());
 
                        if (Integer.parseInt(jsonObject.getString("flag")) == 1){
                            switch1.setChecked(true);
                        }
                        else
                        {
                            switch1.setChecked(false);
                        }
 
                    } catch (JSONException e){ }
                }
            }
        });
С java работаю недавно, не могу понять в чём дело;(
Ответ: Нажать на красную лампочку и выбрать Surround try/catch.
Вопрос: Возникает ошибка при запросе

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
package com.example.ks;
 
/**
 * Created by Denis on 08.09.2016.
 */
import java.util.ArrayList;
import java.util.List;
 
import com.example.ks.parser.JSONParser;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class EditProductActivity extends Activity {
 
    TextView txtData;
    TextView txtFio;
    TextView txtTel;
    TextView txtAddress;
    TextView txtComment;
    TextView txtStatus;
 
    Button btnPrinyat;
    Button btnOtmena;
    Button btnDone;
 
    String pid;
 
    private ProgressDialog pDialog;
 
    JSONParser jsonParser = new JSONParser();
 
    // url для получения одного продукта
    private static final String url_product_detials = "http://192.168.1.2/isp/m/get_product_details.php";
 
    // url для обновления продукта
    private static final String url_update_product = "http://test.devcolibri.com/update_product.php";
 
    // url для удаления продукта
    private static final String url_delete_product = "http://test.devcolibri.com/delete_product.php";
 
    // JSON параметры
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCT = "product";
    private static final String TAG_1 = "id";
    private static final String TAG_2 = "data";
    private static final String TAG_3 = "fio";
    private static final String TAG_4 = "tel";
    private static final String TAG_5 = "address";
    private static final String TAG_6 = "comment";
    private static final String TAG_7 = "status_id";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_product);
 
        btnPrinyat = (Button) findViewById(R.id.btnPrinyat);
        btnOtmena = (Button) findViewById(R.id.btnOtmena);
        btnDone = (Button) findViewById(R.id.btnDone);
 
        // показываем форму про детальную информацию о продукте
        Intent i = getIntent();
 
        // получаем id продукта (pid) с формы
        pid = i.getStringExtra(TAG_1);
 
        // Получение полной информации о продукте в фоновом потоке
        new GetProductDetails().execute();
 
        // обрабочик на кнопку сохранение продукта
        btnPrinyat.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
                // запускаем выполнение задачи на обновление продукта
                new SaveProductDetails().execute();
            }
        });
 
        // обработчик на кнопку удаление продукта
        btnOtmena.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
                // удалем продукт в фоновом потоке
                new DeleteProduct().execute();
            }
        });
 
    }
 
    /**
     * Фоновая асинхронная задача для получения полной информации о продукте
     **/
    class GetProductDetails extends AsyncTask<String, String, String> {
 
        /**
         * Перед началом показать в фоновом потоке прогресс диалог
         **/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(EditProductActivity.this);
            pDialog.setMessage("Loading details. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
 
        /**
         * Получение детальной информации о продукте в фоновом режиме
         **/
        protected String doInBackground(String[] params) {
 
            // обновляем UI форму
            runOnUiThread(new Runnable() {
                public void run() {
                    // проверяем статус success тега
                    int success;
                    try {
                        // Список параметров
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("pid", pid));
 
                        // получаем продукт по HTTP запросу
                        JSONObject json = jsonParser.makeHttpRequest(url_product_detials, "GET", params);
 
                        Log.d("Single Product Details", json.toString());
 
                        success = json.getInt(TAG_SUCCESS);
                        if (success == 1) {
                            // Успешно получинна детальная информация о продукте
                            JSONArray productObj = json.getJSONArray(TAG_PRODUCT);
 
                            // получаем первый обьект с JSON Array
                            JSONObject product = productObj.getJSONObject(0);
 
                            // продукт с pid найден
                            // Edit Text
                            txtData=(TextView) findViewById(R.id.EData);
                            txtFio=(TextView) findViewById(R.id.EFio);
                            txtTel=(TextView) findViewById(R.id.ETel);
                            txtAddress=(TextView) findViewById(R.id.EAddress);
                            txtComment=(TextView) findViewById(R.id.EComment);
                            txtStatus=(TextView) findViewById(R.id.EStatus);
 
                            // покаываем данные о продукте в EditText
                            txtData.setText(product.getString(TAG_2));
                            txtFio.setText(product.getString(TAG_3));
                            txtTel.setText(product.getString(TAG_4));
                            txtAddress.setText(product.getString(TAG_5));
                            txtComment.setText(product.getString(TAG_6));
                            txtStatus.setText(product.getString(TAG_7));
 
                        }else{
                            // продукт с pid не найден
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
 
            return null;
        }
 
        /**
         * После завершения фоновой задачи закрываем диалог прогресс
         **/
        protected void onPostExecute(String file_url) {
            // закрываем диалог прогресс
            pDialog.dismiss();
        }
    }
 
    /**
     * В фоновом режиме выполняем асинхроную задачу на сохранение продукта
     **/
    class SaveProductDetails extends AsyncTask<String, String, String> {
 
        /**
         * Перед началом показываем в фоновом потоке прогрксс диалог
         **/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(EditProductActivity.this);
            pDialog.setMessage("Update ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
 
        /**
         * Сохраняем продукт
         **/
        protected String doInBackground(String[] args) {
 
            // получаем обновленные данные с EditTexts
//            String name = txtName.getText().toString();
//            String price = txtPrice.getText().toString();
//            String description = txtDesc.getText().toString();
 
            // формируем параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
//            params.add(new BasicNameValuePair(TAG_PID, pid));
//            params.add(new BasicNameValuePair(TAG_NAME, name));
//            params.add(new BasicNameValuePair(TAG_PRICE, price));
//            params.add(new BasicNameValuePair(TAG_DESCRIPTION, description));
 
            // отправляем измененные данные через http запрос
            JSONObject json = jsonParser.makeHttpRequest(url_update_product, "POST", params);
 
            // проверяем json success тег
            try {
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    // продукт удачно обнавлён
                    Intent i = getIntent();
                    // отправляем результирующий код 100 чтобы сообщить об обновлении продукта
                    setResult(100, i);
                    finish();
                } else {
                    // продукт не обновлен
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После окончания закрываем прогресс диалог
         **/
        protected void onPostExecute(String file_url) {
            // закрываем прогресс диалог
            pDialog.dismiss();
        }
    }
 
    /**
     * Фоновая асинхронная задача на удаление продукта
     **/
    class DeleteProduct extends AsyncTask<String, String, String> {
 
        /**
         * На начале показываем прогресс диалог
         **/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(EditProductActivity.this);
            pDialog.setMessage("уДАЛЕМ ПРОДУКТ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
 
        /**
         * Удаление продукта
         **/
        protected String doInBackground(String[] args) {
 
            int success;
            try {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("pid", pid));
 
                // получение продукта используя HTTP запрос
                JSONObject json = jsonParser.makeHttpRequest(url_delete_product, "POST", params);
 
                Log.d("Delete Product", json.toString());
 
                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    // Продукт удачно удален
                    Intent i = getIntent();
                    // отправляем результирующий код 100 для уведомления об удалении продукта
                    setResult(100, i);
                    finish();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После оконачния скрываем прогресс диалог
         **/
        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
        }
    }
}
Ошибка такая
C
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
09-08 11:40:01.427 8168-8168/com.example.ks E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: com.example.ks, PID: 8168
                                                              android.os.NetworkOnMainThreadException
                                                                  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
                                                                  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
                                                                  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
                                                                  at libcore.io.IoBridge.connect(IoBridge.java:112)
                                                                  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
                                                                  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
                                                                  at java.net.Socket.connect(Socket.java:843)
                                                                  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
                                                                  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
                                                                  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
                                                                  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
                                                                  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
                                                                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
                                                                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
                                                                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
                                                                  at com.example.ks.parser.JSONParser.makeHttpRequest(JSONParser.java:60)
                                                                  at com.example.ks.EditProductActivity$GetProductDetails$1.run(EditProductActivity.java:140)
                                                                  at android.os.Handler.handleCallback(Handler.java:733)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  at android.os.Looper.loop(Looper.java:136)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5017)
                                                                  at java.lang.reflect.Method.invokeNative(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:515)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                  at dalvik.system.NativeStart.main(Native Method)
В манифесте класс объявлен

Не могу понять в чем проблема
Ответ: А еще вопрос в рамках данной ошибки как вынести json полученный в бэкграудне в PostExecute, надо его туда перенести, я это понял, но как это сделать не понимаю

Добавлено через 19 часов 28 минут
Я правильно дкмаю

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class CategoryTask extends AsyncTask<Void, String, String> {
...
    @Override
    public String doInBackground(Void... params) {
            JSONObject json = jParser.makeHttpRequest(url_all_products, "POST", params);
            try {
                int success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                  return json.toString()
...
 
        protected void onPostExecute(String strProduct) {
           super.onPostExecute(strProduct);
           try {                           
           JSONArray product = new JSONArray(strProduct);
???

Добавлено через 3 часа 2 минуты
на последнюю строку ругается

C
1
Error:(290, 33) error: cannot find symbol method JSONObject(String)
Добавлено через 38 минут
Сам тупой - разобрался
Надо было использовать
try {
Вопрос: Вызов разных фрагментов или активити на клиенте по команде сервера

Подскажите пожалуйста направление/примеры/описалово/библиотеки, хоть что нибудь что поможет решить задачу.

Задачи две:
1. Клиент отправляет месагу серверу (типа: хочу получить инфу о предмете), сервер отвечает "открой фрагмент/активити по кличке "кличка" и распарси для него месагу".

2. Сервер не ждет ничего от клиента и самостоятельно инициализирует месагу, клиент после выполнения отсылает ОК.


Переговоры между клиентом и сервером готовы и работают по принципу сервер<-->сервер без проблем.

Остается заставить клиента вести себя адекватно, то есть вызывать фрагмент или активити которое ему указал сервер.

Как организовать?
Ответ: У меня в заготовке так
Код Java(TM) 2 Platform Standard Edition 5.0
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
public void showForm(int i, Context context, String type){
        switch(i){
        case 1:
            intent = new Intent(context, loginActivity.class);
            break;
        case 2:
            intent = new Intent(context, mainActivity.class);
            break;
        case 3:
            intent = new Intent(context, workActivity.class);
            break;
        case 4:
            intent = new Intent(context, settingActivity.class);
            break;
        case 5:
            intent = new Intent(context, listViewActivity.class);
            break;
        case 6:
            intent = new Intent(context, addOrChangeListViewActivity.class);
            break;
        }
        intent.putExtra("typeListView", type);
        intent.putExtra(formController.class.getCanonicalName(), this);
        context.startActivity(intent);
    }
Но что с этим делать не знаю.

Точнее не знаю как задействовать.

Добавлено через 15 минут
Вопрос то не в том как и что делать по отдельности, а как создать цепочку

messageListner->parser(message)->НазваниеВызываемогоАктивити из parcer->tokenizer(message минус parser)-setTextView

По отдельности все понятно и вопросов нет.
Вопрос: Получить значение ListPreference из настроек

Как обратиться к классу настроек из одного класса и узнать оттуда значение ListPreference и выполнить нужное по выбранному?
Ну у меня было три кнопки и они делали 3 разные вещи, а теперь я хочу, чтобы считало, какой пункт в настройках установлен и по нему выполняло. Теперь не через onClick нужно, т.к. не кнопки, но через конструкцию switch.

У этого ListPreference ключ pref_type_screen_time_out_tile. Ну и чтобы не выполняло, если добро CheckBoxPreference pref_screen_time_out_tile имело значение true.
Ответ: Rube, это вы мне на checkBox сказали.
Значение pref_type_screen_time_out_tile , в котором три пункта получаем в string?
Что в условии switch (...) писать?
Вопрос: Получение данных с сервера, длинные запросы

Здравствуйте. Оговорюсь сразу, на сервере обычный php в цикле опрашивающий бд на изменения.
Взял приложение с хабры и с обычными запросами раз в 15 сек оно прекрасно пашет. накрутил на сервер лонгпул в моем понимании и приложение перестало работать корректно, то есть ответа от сервера еще нет, а оно сразу пишет что ответ пуст. притом основное - в браузере обычном все прекрасно и корректно работает. запросы обычные get.
Оговорюсь сразу, это копипаст с хабры немного переделанный. я пытался и циклы делать на инпутстрим и тп, итог один. он сразу, без ответа сервера выдает что ответ пуст

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
                while (true) { // стартуем бесконечный цикл
 
                    // глянем локальную БД на наличие сообщщений чата
                    cursor = chatDBlocal.rawQuery(
                            "SELECT * FROM chat ORDER BY data", null);
 
                    // если какие-либо сообщения есть - формируем запрос
                    // по которому получим только новые сообщения
                    if (cursor.moveToLast()) {
                        last_time = cursor.getLong(cursor
                                .getColumnIndex("data"));
                        lnk = server_name + "/chat.php?action=select&data=" + last_time.toString();
 
                        // если сообщений в БД нет - формируем запрос
                        // по которому получим всё
                    } else {
                        lnk = server_name + "/chat.php?action=select&data=1";
                    }
 
                    cursor.close();
 
                    // создаем соединение ---------------------------------->
                    try {
                        Log.i("chat",
                                "+ FoneService --------------- ОТКРОЕМ СОЕДИНЕНИЕ");
 
                        conn = (HttpURLConnection) new URL(lnk)
                                .openConnection();
                        conn.setReadTimeout(20000);
                        conn.setConnectTimeout(25000);
                        conn.setRequestMethod("GET");
                        //conn.setRequestProperty("User-Agent", "Mozilla/5.0");
                        conn.setDoInput(true);
                        conn.connect();
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    }
                    // получаем ответ ---------------------------------->
                    
 
 
                    try {
                        InputStream is = conn.getInputStream();
                        while (is == null) {
                            is = conn.getInputStream();
                        }
                        BufferedReader br = new BufferedReader(
                                new InputStreamReader(is, "UTF-8"));
                        StringBuilder sb = new StringBuilder();
                        String bfr_st;
                        while ((bfr_st = br.readLine()) != null) {
                            sb.append(bfr_st);
                        }
 
                        Log.i("chat", "+ FoneService - полный ответ сервера:\n"
                                + sb.toString());
                        // сформируем ответ сервера в string
                        // обрежем в полученном ответе все, что находится за "]"
                        // это необходимо, т.к. json ответ приходит с мусором
                        // и если этот мусор не убрать - будет невалидным
                        ansver = sb.toString();
                        ansver = ansver.substring(0, ansver.indexOf("]") + 1);
 
                        is.close(); // закроем поток
                        br.close(); // закроем буфер
 
 
 
                    } catch (Exception e) {
                        Log.i("chat", "+ FoneService ошибка: " + e.getMessage());
                    } finally {
                        conn.disconnect();
                        Log.i("chat",
                                "+ FoneService --------------- ЗАКРОЕМ СОЕДИНЕНИЕ");
                    }
 
             
                }
прошу совета или подсказки. как реализовать чтобы было ожидание ответа, повторюсь - браузеры работают корректно - ждут ответа, и как только база меняется, скрипт его и выдает.
Ответ: В браузере все прекрасно и на пк и на андроид. Видимо в нем немного другой алгоритм обработки запросов.
Господа, проблема решена. Этот код на андроид в принципе рабочий. Естественно не без костылей, но в корне он работает. Ошибка была именно на сервере, хотел отписать результаты сюда как при очередной проверке заметил несостыковку. - если последним смс писал я, то в базе на сервере дата сообщения была равна дате, передаваемой в запросе, а тут чисто косяк мой - условия были прописаны мной: выдать сообщения из базы, если дата на сервере больше даты последнего сообщения в телефоне, передаваемой в запросе. если дата на сервере меньше, то ждать изменения в БД на появление новых записей(ну как бы и есть long polling). А варианта то что даты равны не было, в итоге сервер сразу выдавал ошибку так как не знал что выдавать, которую приложение интерпретировало за ответ, притом пустой.
Всем спасибо за помощь. Этот вопрос решен, можно закрывать.
Вопрос: Минимальное и максимальное значение для EditText

Имеется EditText и SeekBar.
Код XML
1
2
3
4
5
6
7
8
9
10
11
12
<EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/KNVet"
            android:layout_weight="2"
            android:inputType="numberDecimal"
            android:textColor="#ffffff"
            android:maxLength="3" />
<SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/SeekStrength" />
Для наглядности:


SeekBar задаёт значение для EditText:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
@Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
KNVet.setText(String.valueOf(SeekStrength.getProgress()));
    }
Также, при изменение "вручную" текста (числа) в EditText, SeekBar меняет свою позицию:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
@Override
    public void onClick(View v) {
        switch (v.getId()){       
            case R.id.KNVet:
                float KNVfET = Float.parseFloat(KNVet.getText().toString());
                SeekStrength.setProgress((int)KNVfET);
                break;
        }
    }
Вопрос в том, как установить рамки для значений?
Необходимо сделать так, чтобы в EditText можно было вводить, скажем, значения с 10 до 25, и чтобы при перемещении SeekBar значения опять таки менялись в этом диапазоне, а не 0-100.

Если можно, пожалуйста, самый простой способ реализации (как для новичка). Заранее спасибо большое.
Ответ: Проблема решилась.
Если кому интересно:
Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.mathahakar.e_cigmaster;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Toast;
 
 
public class DIYliq extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener {
 
    int KNVmin, KNVmax;
 
    EditText KBet, KNVet, ONVet, H2Oet, PGet, VGet;
    CheckBox H2Ocb;
    SeekBar SeekBase, SeekStrength, SeekWater, SeekBalance;
    Button CalcLiqDiy;
 
    @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diy_liq);
 
        KBet = (EditText) findViewById(R.id.KBet);
        KNVet = (EditText) findViewById(R.id.KNVet);
        ONVet = (EditText) findViewById(R.id.ONVet);
        H2Oet = (EditText) findViewById(R.id.H2Oet);
        PGet = (EditText) findViewById(R.id.PGet);
        VGet = (EditText) findViewById(R.id.VGet);
        H2Ocb = (CheckBox) findViewById(R.id.H2Ocb);
        SeekBase = (SeekBar) findViewById(R.id.SeekBase);
        SeekStrength = (SeekBar) findViewById(R.id.SeekStrength);
        SeekWater = (SeekBar) findViewById(R.id.SeekWater);
        SeekBalance = (SeekBar) findViewById(R.id.SeekBalance);
        CalcLiqDiy = (Button) findViewById(R.id.CalcLiqDiy);
 
        KBet.setOnClickListener(this);
        KNVet.setOnClickListener(this);
 
        SeekBase.setOnSeekBarChangeListener(this);
        SeekStrength.setOnSeekBarChangeListener(this);
 
        SeekStrength.setEnabled(false);
 
 
 
    }
 
 
    @Override
    public void onClick(View v) {
    switch(v.getId()) {
        case R.id.KBet:
            int KB = Integer.parseInt(KBet.getText().toString());
            SeekBase.setProgress(KB);
            if(KB>0){KNVmin=1; KNVmax=KB;}else{KNVmin=0; KNVmax=0;}
            if (KB>0){KNVet.setText("1"); SeekStrength.setEnabled(true);}
            else{KNVet.setText("0"); KNVet.setEnabled(false); SeekStrength.setEnabled(false);}
            ONVet.requestFocus();
            break;
        case R.id.KNVet:
            int KNV = Integer.parseInt(ONVet.getText().toString());
            SeekStrength.setProgress(KNV);
            break;
 
        }
    }
 
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 
        switch(seekBar.getId()) {
            case R.id.SeekBase:
                KBet.setText(String.valueOf(SeekBase.getProgress()));
                break;
            case R.id.SeekStrength:
                KNVet.setText(String.valueOf(SeekStrength.getProgress()));
                break;
        }
 
    }
 
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
 
    }
 
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        switch(seekBar.getId()) {
            case R.id.SeekBase:
                int KB = Integer.parseInt(KBet.getText().toString());
                if(KB>0){KNVmin=1; KNVmax=KB;}else{KNVmin=0; KNVmax=0;}
                if (KB>0){KNVet.setText("1"); SeekStrength.setEnabled(true);}
                else{KNVet.setText("0"); KNVet.setEnabled(false); SeekStrength.setEnabled(false);}
                break;
            case R.id.SeekStrength:
                int KNV = Integer.parseInt(KNVet.getText().toString());
                if (KNV<KNVmin){KNVet.setText(Integer.toString(KNVmin)); SeekStrength.setProgress(KNVmin);}
                if (KNV>KNVmax){KNVet.setText(Integer.toString(KNVmax)); SeekStrength.setProgress(KNVmax);}
        }
    }
}
Вопрос: Вылетает приложение при обращении к серверу

Обращаюсь к серверу для получения списка продуктов. Сервер проверил, JSON ответ в порядке, на IOS работает без проблем. В случае с андроид вылетает при обращении к серверу.
Java(TM) 2 Platform Standard Edition 5.0
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
package loc.alook.AndroidAndSQL;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
 
import loc.alook.parser.JSONParser;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
 
public class AllProductsActivity extends ListActivity {
 
    private ProgressDialog pDialog;
 
    // Создаем JSON парсер
    JSONParser jParser = new JSONParser();
 
    ArrayList<HashMap<String, String>> productsList;
 
    // url получения списка всех продуктов
    private static String url_all_products = "http://alook.loc:80/get_all_products.php";
 
    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    private static final String TAG_PID = "pid";
    private static final String TAG_NAME = "name";
 
    // тут будет хранится список продуктов
    JSONArray products = null;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_products);
 
        // Hashmap for ListView
        productsList = new ArrayList<HashMap<String, String>>();
 
        // Загружаем продукты в фоновом потоке
        new LoadAllProducts().execute();
 
        // получаем ListView
        ListView lv = getListView();
 
        // на выбор одного продукта
        // запускается Edit Product Screen
        lv.setOnItemClickListener(new OnItemClickListener() {
 
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting values from selected ListItem
                String pid = ((TextView) view.findViewById(R.id.pid)).getText()
                        .toString();
 
                // Запускаем новый intent который покажет нам Activity
                Intent in = new Intent(getApplicationContext(), EditProductActivity.class);
                // отправляем pid в следующий activity
                in.putExtra(TAG_PID, pid);
 
                // запуская новый Activity ожидаем ответ обратно
                startActivityForResult(in, 100);
            }
        });
 
    }
 
    // Ответ из Edit Product Activity
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // если результующий код равен 100
        if (resultCode == 100) {
            // если полученный код результата равен 100
            // значит пользователь редактирует или удалил продукт
            // тогда мы перезагружаем этот экран
            Intent intent = getIntent();
            finish();
            startActivity(intent);
        }
 
    }
 
    /**
     * Фоновый Async Task для загрузки всех продуктов по HTTP запросу
     * */
    class LoadAllProducts extends AsyncTask<String, String, String> {
 
        /**
         * Перед началом фонового потока Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(AllProductsActivity.this);
            pDialog.setMessage("Loading. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
 
        /**
         * Получаем все продукт из url
         * */
        protected String doInBackground(String... args) {
            // Будет хранить параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // получаем JSON строк с URL
            JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
 
            Log.d("All Products: ", json.toString());
 
            try {
                // Получаем SUCCESS тег для проверки статуса ответа сервера
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    // продукт найден
                    // Получаем масив из Продуктов
                    products = json.getJSONArray(TAG_PRODUCTS);
 
                    // перебор всех продуктов
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);
 
                        // Сохраняем каждый json елемент в переменную
                        String id = c.getString(TAG_PID);
                        String name = c.getString(TAG_NAME);
 
                        // Создаем новый HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
 
                        // добавляем каждый елемент в HashMap ключ => значение
                        map.put(TAG_PID, id);
                        map.put(TAG_NAME, name);
 
                        // добавляем HashList в ArrayList
                        productsList.add(map);
                    }
                } else {
                    // продукт не найден
                    // Запускаем Add New Product Activity
                    Intent i = new Intent(getApplicationContext(),
                            NewProductActivity.class);
                    // Закрытие всех предыдущие activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После завершения фоновой задачи закрываем прогрес диалог
         * **/
        protected void onPostExecute(String file_url) {
            // закрываем прогресс диалог после получение все продуктов
            pDialog.dismiss();
            // обновляем UI форму в фоновом потоке
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Обновляем распарсенные JSON данные в ListView
                     * */
                    ListAdapter adapter = new SimpleAdapter(
                            AllProductsActivity.this, productsList,
                            R.layout.list_item, new String[] { TAG_PID,
                            TAG_NAME},
                            new int[] { R.id.pid, R.id.name });
                    // обновляем listview
                    setListAdapter(adapter);
                }
            });
 
        }
 
    }
 
}
Ответ: Загрузил базу на сервер, думал может проблема с Denwer, но все так же.
Java(TM) 2 Platform Standard Edition 5.0
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
 
import com.devcolibri.parser.JSONParser;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
 
public class AllProductsActivity extends ListActivity {
 
    private ProgressDialog pDialog;
 
    // Создаем JSON парсер
    JSONParser jParser = new JSONParser();
 
    ArrayList<HashMap<String, String>> productsList;
 
    // url получения списка всех продуктов
    private static String url_all_products = "http://alook.kz/server/get_all_products.php";
 
    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    private static final String TAG_PID = "pid";
    private static final String TAG_NAME = "name";
 
    // тут будет хранится список продуктов
    JSONArray products = null;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all_products);
 
        // Hashmap for ListView
        productsList = new ArrayList<HashMap<String, String>>();
 
        // Загружаем прожукты в фоновом потоке
        new LoadAllProducts().execute();
 
        // получаем ListView
        ListView lv = getListView();
 
        // на выбор одного продукта
        // запускается Edit Product Screen
        lv.setOnItemClickListener(new OnItemClickListener() {
 
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting values from selected ListItem
                String pid = ((TextView) view.findViewById(R.id.pid)).getText()
                        .toString();
 
                // Запускаем новый intent который покажет нам Activity
                Intent in = new Intent(getApplicationContext(), EditProductActivity.class);
                // отправляем pid в следующий activity
                in.putExtra(TAG_PID, pid);
 
                // запуская новый Activity ожидаем ответ обратно
                startActivityForResult(in, 100);
            }
        });
 
    }
 
    // Ответ из Edit Product Activity
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // если результующий код равен 100
        if (resultCode == 100) {
            // если полученный код результата равен 100
            // значит пользователь редактирует или удалил продукт
            // тогда мы перезагружаем этот экран
            Intent intent = getIntent();
            finish();
            startActivity(intent);
        }
 
    }
 
    /**
     * Фоновый Async Task для загрузки всех продуктов по HTTP запросу
     * */
    class LoadAllProducts extends AsyncTask<String, String, String> {
 
        /**
         * Перед началом фонового потока Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(AllProductsActivity.this);
            pDialog.setMessage("Загрузка продуктов. Подождите...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
 
        /**
         * Получаем все продукт из url
         * */
        protected String doInBackground(String... args) {
            // Будет хранить параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // получаем JSON строк с URL
            JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
 
            Log.d("All Products: ", json.toString());
 
            try {
                // Получаем SUCCESS тег для проверки статуса ответа сервера
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    // продукт найден
                    // Получаем масив из Продуктов
                    products = json.getJSONArray(TAG_PRODUCTS);
 
                    // перебор всех продуктов
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);
 
                        // Сохраняем каждый json елемент в переменную
                        String id = c.getString(TAG_PID);
                        String name = c.getString(TAG_NAME);
 
                        // Создаем новый HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
 
                        // добавляем каждый елемент в HashMap ключ => значение
                        map.put(TAG_PID, id);
                        map.put(TAG_NAME, name);
 
                        // добавляем HashList в ArrayList
                        productsList.add(map);
                    }
                } else {
                    pDialog.dismiss();
                    // продукт не найден
                    // Запускаем Add New Product Activity
                    Intent i = new Intent(getApplicationContext(),
                            NewProductActivity.class);
                    // Закрытие всех предыдущие activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После завершения фоновой задачи закрываем прогрес диалог
         * **/
        protected void onPostExecute(String file_url) {
            // закрываем прогресс диалог после получение все продуктов
            pDialog.dismiss();
            // обновляем UI форму в фоновом потоке
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Обновляем распарсенные JSON данные в ListView
                     * */
                    ListAdapter adapter = new SimpleAdapter(
                            AllProductsActivity.this, productsList,
                            R.layout.list_item, new String[] { TAG_PID,
                            TAG_NAME},
                            new int[] { R.id.pid, R.id.name });
                    // обновляем listview
                    setListAdapter(adapter);
                }
            });
 
        }
 
    }
 
}
Вопрос: Один обработчик для нескольких switch

Привет. Делаю приложение для управления устройством на ардуино по блютуз.
Кое как разобрался как заставить работать switch, но у меня на каждый переключатель свой обработчик, как можно сделать, чтобы был только 1 обработчик, а определение действий происходило в зависимости от id переключателя?
Вот что имею сейчас:
Java(TM) 2 Platform Standard Edition 5.0
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
switch1 = (Switch) findViewById(R.id.switch1);
 
        switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
 
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // в зависимости от значения isChecked выводим нужное сообщение
                if (isChecked) {
                    Toast.makeText(getApplicationContext(), "SET 1 ON", Toast.LENGTH_SHORT).show();
                    sendData("switch_1-1|");
                } else {
                    Toast.makeText(getApplicationContext(), "SET 1 OFF", Toast.LENGTH_SHORT).show();
                    sendData("switch_1-0|");
                }
            }
        });
 
        switch2 = (Switch) findViewById(R.id.switch2);
        switch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
 
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // в зависимости от значения isChecked выводим нужное сообщение
                if (isChecked) {
                    Toast.makeText(getApplicationContext(), "SET 2 ON", Toast.LENGTH_SHORT).show();
                    sendData("switch_2-1|");
                } else {
                    Toast.makeText(getApplicationContext(), "SET 2 OFF", Toast.LENGTH_SHORT).show();
                    sendData("switch_2-0|");
                }
            }
        });
Ответ: Я никого не троллил.
Просто указал на возможную проблему.
Вопрос: Ответ от PHP сервера

Читал статью
А вот смотрите, если я хочу сделать все не на json, а чисто на пхп. Когда приходит на сервер определённое значение переменной, на пхп выводиться echo с текстом. Как мне получить то, что в этом echo? Можно ли как-то получить те данные?
Ответ: Я уже придумал как)
Получаем ип запроса, шлем запрос получения данных и сервер по последнему запросу данного ип шлёт данные...
Вопрос: Вывод данных полученных через Bluetooth на экран

Есть датчик dht22 с него приходят 2 показателя: Температура и влажность,требуется получить данные по блютус на смартфон и вывести на экран.

Использую данный прмиер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                
                        int endOfLineIndex = sb.indexOf("\r\n");                            
                        if (endOfLineIndex > 0) {                                            
                            String sbprint = sb.substring(0, endOfLineIndex);               
                            sb.delete(0, sb.length());                                      
                            txtArduino.setText(sbprint);             
                            
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
Но в данном случае все выводиться в 1 текстовое поле, подскажите где можно достать как разделить показатели, или нужно делать 2 Handler, и еще 1 вопрос - частоту опроса датчика нужно менять в скетче ардуино или это можно сделать в каком то цикле в handler.
Ответ:
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
 h = new Handler() {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                    case RECIEVE_MESSAGE:
                        // если приняли сообщение в Handler
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);
                        sb.append(strIncom);                                                // формируем строку
                        int endOfLineIndex = sb.indexOf("\r\n");                            // определяем символы конца строки
                        if (endOfLineIndex > 0) {                                            // если встречаем конец строки,
                            String sbprint = sb.substring(0, endOfLineIndex);               // то извлекаем строку
                            sb.delete(0, sb.length());// и очищаем sb
 
                            String[] sb = sbprint.split("U");
                            for (int i=0; i<sb.length; i++) {
                                String[] command = sb[i].split("=");
                                if (command[0].compareTo("h") == 0) {
                                    txtArduino.setText("Humidity :"  + sb);             // обновляем TextView
                                }
                            }
 
 
 
 
                            // обновляем TextView
 
                        }
                        //Log.d(TAG, "...Строка:"+ sb.toString() +  "Байт:" + msg.arg1 + "...");
                        break;
                }
            };
        };
видимо я плохо понял, дайте ссылку на пример или где подробно описано выделение и правильная сортировка.
заранее спс