Страница 1 из 1

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

Добавлено: 08 фев 2015, 13:58
Iren
Необходимо избавиться от выполнения операций в главном потоке, т.к. я в андроиде пока полный ноль, прошу оперативной помощи.



Код: Выделить всё

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;
        }

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

Добавлено: 09 фев 2015, 03:21
ANdriy123456
Насколько я понял, то ты хочеш вынест с глввного потока запрос на сервер и обработку ответа. Проще и правельней будет использовать библиотеку asynchttpclient.

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

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

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

Добавлено: 09 фев 2015, 10:40
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();

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

Добавлено: 09 фев 2015, 13:39
KamiSempai
Запустить AsyncTask для того что бы в нем вызвать runOnUiThread. Не понял прикола.

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

Добавлено: 09 фев 2015, 16:26
Mikhail_dev
т.к. я в андроиде пока полный ноль
А как у вас с Java?

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

Добавлено: 10 фев 2015, 05:54
Iren
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 я знакома, но проблема в том, что в этом коде как раз он и используется

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

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

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

Добавлено: 10 фев 2015, 05:56
Iren
Mikhail_dev писал(а):
т.к. я в андроиде пока полный ноль
А как у вас с Java?
приблизительно так же

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

Добавлено: 10 фев 2015, 11:00
Mikhail_dev
Ну так спросите на сайте devcolibri.com об этом
приблизительно так же
viewtopic.php?f=51&t=3408

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

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

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

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

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

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

Добавлено: 11 фев 2015, 17:53
KamiSempai
Все там хорошо. Это вы не правильно поняли. runOnUiThread вызывается уже в onPostExecute. Что, кстати, не обязательно.

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

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

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

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

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

Добавлено: 12 фев 2015, 17:29
KamiSempai
Воу! Я не до читал. Много текста, не осилил, дошел только до первого асинктаска.

Написал гневное сообщение, но боюсь оно так и не выйдет в свет, все сообщения проходят перемодерацию.