UiThread или как вынести процесс из главного потока.

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

UiThread или как вынести процесс из главного потока.

Сообщение 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

Re: UiThread или как вынести процесс из главного потока.

Сообщение ANdriy123456 » 09 фев 2015, 03:21

Насколько я понял, то ты хочеш вынест с глввного потока запрос на сервер и обработку ответа. Проще и правельней будет использовать библиотеку asynchttpclient.

Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

Re: UiThread или как вынести процесс из главного потока.

Сообщение Iren » 09 фев 2015, 10:19

ANdriy123456 писал(а):Насколько я понял, то ты хочеш вынест с глввного потока запрос на сервер и обработку ответа. Проще и правельней будет использовать библиотеку asynchttpclient.
а как конкретно это реализовать?

sire de Coucy
Сообщения: 1
Зарегистрирован: 06 фев 2015, 16:28

Re: UiThread или как вынести процесс из главного потока.

Сообщение 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
Откуда: Мордор

Re: UiThread или как вынести процесс из главного потока.

Сообщение KamiSempai » 09 фев 2015, 13:39

Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: UiThread или как вынести процесс из главного потока.

Сообщение Mikhail_dev » 09 фев 2015, 16:26

т.к. я в андроиде пока полный ноль
А как у вас с Java?

Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

Re: UiThread или как вынести процесс из главного потока.

Сообщение 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

Re: UiThread или как вынести процесс из главного потока.

Сообщение Iren » 10 фев 2015, 05:55

KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю

Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

Re: UiThread или как вынести процесс из главного потока.

Сообщение Iren » 10 фев 2015, 05:56

Mikhail_dev писал(а):
т.к. я в андроиде пока полный ноль
А как у вас с Java?
приблизительно так же

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: UiThread или как вынести процесс из главного потока.

Сообщение Mikhail_dev » 10 фев 2015, 11:00

Ну так спросите на сайте devcolibri.com об этом
приблизительно так же
viewtopic.php?f=51&t=3408

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: UiThread или как вынести процесс из главного потока.

Сообщение KamiSempai » 10 фев 2015, 15:22

Iren писал(а):
KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю
Ссылочку можно? Сейчас мы там все в клочья разнесем)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

Re: UiThread или как вынести процесс из главного потока.

Сообщение Iren » 11 фев 2015, 07:06

KamiSempai писал(а):
Iren писал(а):
KamiSempai писал(а):Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.
код с урока сайта devcolibri.com, поэтому я тоже прикола не понимаю
Ссылочку можно? Сейчас мы там все в клочья разнесем)

вот, держи: http://devcolibri.com/1548

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: UiThread или как вынести процесс из главного потока.

Сообщение KamiSempai » 11 фев 2015, 17:53

Все там хорошо. Это вы не правильно поняли. runOnUiThread вызывается уже в onPostExecute. Что, кстати, не обязательно.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Iren
Сообщения: 13
Зарегистрирован: 08 фев 2015, 13:55

Re: UiThread или как вынести процесс из главного потока.

Сообщение Iren » 12 фев 2015, 07:12

KamiSempai писал(а):Все там хорошо. Это вы не правильно поняли. runOnUiThread вызывается уже в onPostExecute. Что, кстати, не обязательно.
нет, ошибка главного потока при запуске на версии андроида выше 3.0. edittext вызывается из фонового потока, из-за чего приложение и вылетает

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: UiThread или как вынести процесс из главного потока.

Сообщение Mikhail_dev » 12 фев 2015, 09:53

Денис, ты увидел первый runOnUiThread. на самом деле по ссылке есть и в background методе
То что это в этом ошибка тут давно догадались. Интересно было другое, а именно кто кто такое мог написать. И таки да, на сайте у них глупость написана. Автор не понимает что пишет и пытается учить других. Если бы он сделал в одном месте ошибку, то я бы еще поверил что опечатка, но он runOnUiThread пишет то в onPostExecute, то в onBackground. В обоих случаях он не нужен, а в одном он категорически не нужен. не рекомендую использовать тот сайт.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: UiThread или как вынести процесс из главного потока.

Сообщение KamiSempai » 12 фев 2015, 17:29

Воу! Я не до читал. Много текста, не осилил, дошел только до первого асинктаска.

Написал гневное сообщение, но боюсь оно так и не выйдет в свет, все сообщения проходят перемодерацию.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить