Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 08 фев 2015, 13:58
Необходимо избавиться от выполнения операций в главном потоке, т.к. я в андроиде пока полный ноль, прошу оперативной помощи.
Код: Выделить всё
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
txtName = (EditText) findViewById(R.id.inputName);
txtPrice = (EditText) findViewById(R.id.inputPrice);
txtDesc = (EditText) findViewById(R.id.inputDesc);
// покаываем данные о продукте в EditText
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION));
}else{
// продукт с pid не найден
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
-
ANdriy123456
- Сообщения: 138
- Зарегистрирован: 27 июн 2014, 01:41
Сообщение
ANdriy123456 » 09 фев 2015, 03:21
Насколько я понял, то ты хочеш вынест с глввного потока запрос на сервер и обработку ответа. Проще и правельней будет использовать библиотеку asynchttpclient.
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 09 фев 2015, 10:19
ANdriy123456 писал(а):Насколько я понял, то ты хочеш вынест с глввного потока запрос на сервер и обработку ответа. Проще и правельней будет использовать библиотеку asynchttpclient.
а как конкретно это реализовать?
-
sire de Coucy
- Сообщения: 1
- Зарегистрирован: 06 фев 2015, 16:28
Сообщение
sire de Coucy » 09 фев 2015, 10:40
Iren писал(а):Необходимо избавиться от выполнения операций в главном потоке, т.к. я в андроиде пока полный ноль, прошу оперативной помощи.
Если не стоит задача не использовать сторонние библиотеки то рекомендую Retrofit или GoogleVolley для взаимодействия с сервером (отправка запросов и получения ответов) .
Можно использовать AsyncTask
Код: Выделить всё
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
// Этот метод вызовется перед методом doInBackground
}
@Override
protected Void doInBackground(Void... params) {
// Здесь твой код запустится в отдельном потоке
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// Этот метод вызовется после метода doInBackground
}
}.execute();
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 09 фев 2015, 13:39
Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Сообщение
Mikhail_dev » 09 фев 2015, 16:26
т.к. я в андроиде пока полный ноль
А как у вас с Java?
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 10 фев 2015, 05:54
sire de Coucy писал(а):Iren писал(а):Необходимо избавиться от выполнения операций в главном потоке, т.к. я в андроиде пока полный ноль, прошу оперативной помощи.
Если не стоит задача не использовать сторонние библиотеки то рекомендую Retrofit или GoogleVolley для взаимодействия с сервером (отправка запросов и получения ответов) .
Можно использовать AsyncTask
Код: Выделить всё
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
// Этот метод вызовется перед методом doInBackground
}
@Override
protected Void doInBackground(Void... params) {
// Здесь твой код запустится в отдельном потоке
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
// Этот метод вызовется после метода doInBackground
}
}.execute();
со структурой asynctask я знакома, но проблема в том, что в этом коде как раз он и используется
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 10 фев 2015, 05:55
KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 10 фев 2015, 05:56
Mikhail_dev писал(а): т.к. я в андроиде пока полный ноль
А как у вас с Java?
приблизительно так же
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 10 фев 2015, 15:22
Iren писал(а):KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю
Ссылочку можно? Сейчас мы там все в клочья разнесем)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 11 фев 2015, 07:06
KamiSempai писал(а):Iren писал(а):KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю
Ссылочку можно? Сейчас мы там все в клочья разнесем)
вот, держи:
http://devcolibri.com/1548
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 11 фев 2015, 17:53
Все там хорошо. Это вы не правильно поняли. runOnUiThread вызывается уже в onPostExecute. Что, кстати, не обязательно.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
Iren
- Сообщения: 13
- Зарегистрирован: 08 фев 2015, 13:55
Сообщение
Iren » 12 фев 2015, 07:12
KamiSempai писал(а):Все там хорошо. Это вы не правильно поняли. runOnUiThread вызывается уже в onPostExecute. Что, кстати, не обязательно.
нет, ошибка главного потока при запуске на версии андроида выше 3.0. edittext вызывается из фонового потока, из-за чего приложение и вылетает
-
Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Сообщение
Mikhail_dev » 12 фев 2015, 09:53
Денис, ты увидел первый runOnUiThread. на самом деле по ссылке есть и в background методе
То что это в этом ошибка тут давно догадались. Интересно было другое, а именно кто кто такое мог написать. И таки да, на сайте у них глупость написана. Автор не понимает что пишет и пытается учить других. Если бы он сделал в одном месте ошибку, то я бы еще поверил что опечатка, но он runOnUiThread пишет то в onPostExecute, то в onBackground. В обоих случаях он не нужен, а в одном он категорически не нужен. не рекомендую использовать тот сайт.
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 12 фев 2015, 17:29
Воу! Я не до читал. Много текста, не осилил, дошел только до первого асинктаска.
Написал гневное сообщение, но боюсь оно так и не выйдет в свет, все сообщения проходят перемодерацию.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.