Форум программистов, компьютерный форум CyberForum.ru

Вылетает приложение при обращении к серверу - Android

Восстановить пароль Регистрация
 
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
30.11.2015, 20:02     Вылетает приложение при обращении к серверу #1
Обращаюсь к серверу для получения списка продуктов. Сервер проверил, JSON ответ в порядке, на IOS работает без проблем. В случае с андроид вылетает при обращении к серверу.
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
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);
                }
            });
 
        }
 
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
30.11.2015, 20:06     Вылетает приложение при обращении к серверу #2
лог ошибки это тайна?
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
30.11.2015, 20:13  [ТС]     Вылетает приложение при обращении к серверу #3
Лог
11-30 10:59:58.163 487-542/? E/NetdConnector﹕ NDC Command {363 bandwidth gettetherstats} took too long (519ms)
11-30 10:59:59.523 3184-3184/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
11-30 10:59:59.527 3184-3184/? E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
11-30 10:59:59.551 3184-3184/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
11-30 10:59:59.555 3184-3184/? E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
11-30 11:00:04.603 3184-3203/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
11-30 11:00:04.607 3184-3203/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
11-30 11:00:04.731 3184-3203/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: loc.alook.AndroidAndSQL, PID: 3184
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
************at java.lang.Thread.run(Thread.java:841)
11-30 11:00:10.747 3184-3184/? E/WindowManager﹕ android.view.WindowLeaked: Activity loc.alook.AndroidAndSQL.AllProductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52ade674 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:346)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.onPreExecute(AllProductsActivity.java:119)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at loc.alook.AndroidAndSQL.AllProductsActivity.onCreate(AllProductsActivity.java:60)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
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:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
30.11.2015, 20:45     Вылетает приложение при обращении к серверу #4
могу предположить что продукт не найден и ошибка случается в этих строках
Java
1
2
3
4
5
Intent i = new Intent(getApplicationContext(),
                            NewProductActivity.class);
                    // Закрытие всех предыдущие activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
если их закоментировать вылетит?

и в onPostExecute не нужно писать runOnUI Thread - он и так выполняется в UI потоке
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 08:44  [ТС]     Вылетает приложение при обращении к серверу #5
Также вылетает при соединении.
Лог
11-30 11:57:40.339 3630-3651/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
11-30 11:57:40.387 3630-3651/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
11-30 11:57:40.419 3630-3651/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: loc.alook.AndroidAndSQL, PID: 3630
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
************at java.lang.Thread.run(Thread.java:841)
11-30 11:57:44.687 3630-3630/? E/WindowManager﹕ android.view.WindowLeaked: Activity loc.alook.AndroidAndSQL.AllProductsActivity has leaked window com.android.internal.policy.i


Добавлено через 11 часов 33 минуты
up!
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
01.12.2015, 16:20     Вылетает приложение при обращении к серверу #6
почитал еще раз код, в нем же не делается dialog.dismiss();
он остается на экране 100%
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 20:24  [ТС]     Вылетает приложение при обращении к серверу #7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 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);
                }
            });
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
01.12.2015, 20:30     Вылетает приложение при обращении к серверу #8
а вдруг туда дело даже и не доходит, а попадает сюда
Java
1
2
3
4
5
6
7
8
else {
                    // продукт не найден
                    // Запускаем Add New Product Activity
                    Intent i = new Intent(getApplicationContext(),
                            NewProductActivity.class);
                    // Закрытие всех предыдущие activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 21:27  [ТС]     Вылетает приложение при обращении к серверу #9
Спасибо за советы, но к сожалению и это не помогло. Прилагаю лог:
Лог

12-01 13:24:03.708 1283-1283/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
12-01 13:24:03.708 1283-1283/? E/android.os.Debug﹕ failed to load memtrack module: -2
12-01 13:24:08.556 1345-1345/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
12-01 13:24:08.568 1345-1345/? E/android.os.Debug﹕ failed to load memtrack module: -2
12-01 13:24:11.876 1379-1379/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
12-01 13:24:11.880 1379-1379/? E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
12-01 13:24:11.904 1379-1379/? E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
12-01 13:24:11.904 1379-1379/? E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
12-01 13:24:16.028 1379-1399/? E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
12-01 13:24:16.032 1379-1399/? E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
12-01 13:24:16.156 1379-1399/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: loc.alook.AndroidAndSQL, PID: 1379
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
************at java.lang.Thread.run(Thread.java:841)
12-01 13:24:22.272 1379-1379/? E/WindowManager﹕ android.view.WindowLeaked: Activity loc.alook.AndroidAndSQL.AllProductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52ae5618 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:346)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at loc.alook.AndroidAndSQL.AllProductsActivity$LoadAllProducts.onPreExecute(AllProductsActivity.java:119)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at loc.alook.AndroidAndSQL.AllProductsActivity.onCreate(AllProductsActivity.java:60)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
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:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
FireOwl
 Аватар для FireOwl
62 / 44 / 5
Регистрация: 01.07.2009
Сообщений: 145
01.12.2015, 23:24     Вылетает приложение при обращении к серверу #10
Проверь объект json сразу после создания на равенство null. Возможно ошибка парсинга ответа.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
02.12.2015, 11:39     Вылетает приложение при обращении к серверу #11
Цитата Сообщение от tkuntubaev Посмотреть сообщение
Спасибо за советы, но к сожалению и это не помогло. Прилагаю лог
да кому нужны эти спасбо, лучше код исправленный покажи
есть подозрение что там вообще ни строчки не поменялось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2015, 13:23     Вылетает приложение при обращении к серверу
Еще ссылки по теме:

Android Вылетает приложение
Android Вылетает приложение при использовании Adobe Air
Приложение вылетает при старте на 4.1, на 4.4 - работает Android
Android Фрагменты: приложение вылетает при 4-ом нажатии на кнопку
Android При изменении шрифта на собственный вылетает приложение

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

Или воспользуйтесь поиском по форуму:
tkuntubaev
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
02.12.2015, 13:23  [ТС]     Вылетает приложение при обращении к серверу #12
Загрузил базу на сервер, думал может проблема с Denwer, но все так же.
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
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);
                }
            });
 
        }
 
    }
 
}
Yandex
Объявления
02.12.2015, 13:23     Вылетает приложение при обращении к серверу
Ответ Создать тему
Опции темы

Текущее время: 02:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru