Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 39
1

AsyncTask

04.06.2015, 19:45. Показов 1147. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, при использовании двух одинаковых методов получается разный результат. AsyncTask в одном случае успешно передает данные в сеть, а в другом вываливает в лог сообщения об ошибках. Может знает кто, что тут за косяк.

рабочий таск
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
        btnCreateProduct.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View view) {
                if (Ipoteka.isChecked()) inputIpoteka="1";
                     new CreateNewProduct().execute();
            }
        });
 
class CreateNewProduct extends AsyncTask<String, String, String> {
 
        /**
         * Перед согданием в фоновом потоке показываем прогресс диалог
         **/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(NewProductActivity.this);
            pDialog.setMessage("Создание продукта...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
 
        /**
         * Создание продукта
         **/
        protected String doInBackground(String... args) {
            String street = inputStreet.getSelectedItem().toString();
            String number = inputNumber.getText().toString();
            String rooms = inputRooms.getSelectedItem().toString();
            String square = inputSquare.getText().toString();
            String floors = inputFloors.getText().toString();
            String floor = inputFloor.getSelectedItem().toString();
            String typehome = inputTypeHome.getSelectedItem().toString();
            String ipoteka = inputIpoteka;
            String price = inputPrice.getText().toString();
            String owner = inputOwner.getText().toString();
            String ownerphone = inputPhoneOwner.getText().toString();
            String photo = inputPhoto;
 
            // Заполняем параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("street", street));
            params.add(new BasicNameValuePair("number", number));
            params.add(new BasicNameValuePair("rooms", rooms));
            params.add(new BasicNameValuePair("square", square));
            params.add(new BasicNameValuePair("floors", floors));
            params.add(new BasicNameValuePair("floor", floor));
            params.add(new BasicNameValuePair("typehome", typehome));
            params.add(new BasicNameValuePair("ipoteka", ipoteka));
            params.add(new BasicNameValuePair("price", price));
            params.add(new BasicNameValuePair("owner", owner));
            params.add(new BasicNameValuePair("ownerphone", ownerphone));
            params.add(new BasicNameValuePair("photo", photo));
 
            // получаем JSON объект
            JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params);
 
            Log.d("Create Response", json.toString());
 
            try {
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    // продукт удачно создан
                    Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
                    startActivity(i);
 
                    // закрываем это окно
                    finish();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После оконачния скрываем прогресс диалог
         **/
        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
        }
 
    }
нерабочий
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
    Button reg = (Button) findViewById(R.id.reg);
        reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new CreateUser().execute();
 
            }
        });
 
    }
 
    class CreateUser extends AsyncTask<String, String, String> {
 
        /**
         * Перед согданием в фоновом потоке показываем прогресс диалог
         **/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Rules.this);
            pDialog.setMessage("Создание пользователя...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
 
        /**
         * Создание продукта
         **/
        protected String doInBackground(String... args) {
            String login = inputLogin.getText().toString();
            String password = inputPassword.getText().toString();
            String name = inputName.getText().toString();
            String surname = inputSurname.getText().toString();
 
            // Заполняем параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("login", login));
            params.add(new BasicNameValuePair("password", password));
            params.add(new BasicNameValuePair("name", name));
            params.add(new BasicNameValuePair("surname", surname));
 
 
            // получаем JSON объект
            String add_user = "http://mydip.esy.es/create_user.php";
            JSONObject json = jsonParserRule.makeHttpRequest(add_user, "POST", params);
 
            Log.d("Create Response", json.toString());
 
            try {
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    Intent i = new Intent(getApplicationContext(), Rules.class);
                    startActivity(i);
 
                    // закрываем это окно
                    finish();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
        /**
         * После оконачния скрываем прогресс диалог
         **/
        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
        }
 
    }
ну и лог на десерт
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
06-04 16:31:27.112  21753-21767/com.devcolibri.androidandmysql E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
            at java.util.concurrent.FutureTask.run(FutureTask.java:239)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.NullPointerException
            at com.devcolibri.androidandmysql.Rules$CreateUser.doInBackground(Rules.java:102)
            at com.devcolibri.androidandmysql.Rules$CreateUser.doInBackground(Rules.java:66)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
************at java.lang.Thread.run(Thread.java:856)
06-04 16:31:27.684  21753-21753/com.devcolibri.androidandmysql E/WindowManager﹕ Activity com.devcolibri.androidandmysql.Rules has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{533336bc V.E..... R.....ID 0,0-280,115} that was originally added here
    android.view.WindowLeaked: Activity com.devcolibri.androidandmysql.Rules has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{533336bc V.E..... R.....ID 0,0-280,115} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:281)
            at com.devcolibri.androidandmysql.Rules$CreateUser.onPreExecute(Rules.java:78)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
            at android.os.AsyncTask.execute(AsyncTask.java:534)
            at com.devcolibri.androidandmysql.Rules$1.onClick(Rules.java:59)
            at android.view.View.performClick(View.java:4204)
            at android.view.View$PerformClick.run(View.java:17355)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 19:45
Ответы с готовыми решениями:

AsyncTask и get()
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный ProgressDialog. После...

AsyncTask
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { @Override...

AsyncTask
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь...

Отмена AsyncTask
Привет. Есть такой код: @Override protected Void doInBackground(Void... params) { try {...

3
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
04.06.2015, 21:41 2
Цитата Сообщение от Radgalf Посмотреть сообщение
Caused by: java.lang.NullPointerException
* * * * * * at com.devcolibri.androidandmysql.Rules$CreateUser.doInBackground(Rules.java:102)
Вот тут самое важное.
0
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 39
05.06.2015, 06:51  [ТС] 3
Это здорово, вот только что ему не нравится, это строка выводит в лог данные.
Java
1
Log.d("Create Response", json.toString());
Но вот что заметил, если сразу после запуска приложения запускать активацию нерабочего таска, то прога сразу крашится, если же сперва запустить рабочий такс, а потом нерабочий, то ничего не крашится, но и не выполняется, а в лог вообще вываливаются данные из первого таска, хотя это вообще разные активности.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.06.2015, 08:36 4
чисто имхо
у него в doInBackground по условию стартует активити, а потом на "текущей" вызывается finish(), повторяю - все это в doInBackground

я бы никогда так не делал
1
05.06.2015, 08:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 08:36
Помогаю со студенческими работами здесь

AsyncTask ObjectAnimator
Добрый вечер. Прошу помочь мне. Пытаюсь написать карточную игру. В игре игрок выбирает две карты,...

Не работает AsyncTask
Не работает AsyncTask , вот код: private void registerInBackground() { new...

AsyncTask и SQLite
Здравствуйте! У меня в приложении есть БД SQLite, при нажатие на кнопку загрузки, приложение...

Работа с AsyncTask
Попробовал использовать AsyncTask и возник вопрос. У меня есть несколько ф-й, которые парсят...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru