Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11

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

30.11.2015, 20:02. Показов 1588. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обращаюсь к серверу для получения списка продуктов. Сервер проверил, 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);
                }
            });
 
        }
 
    }
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2015, 20:02
Ответы с готовыми решениями:

Ошибка HTTP при обращении к серверу
Здравствуйте. У нас в офисе есть машины на 10-ке, 7-ке и XP. На них установлен тонкий клиент 1С.8 ЗКГУ (зарплата) с ...

Ошибка 500 при обращении к серверу
Сайт на Laravel. Написал API для мобильного приложения и протестировал php скриптом из командной строки. Все хорошо работает. Человек пишет...

Ошибка при обращении к серверу json
Здравствуйте. При обращении к серверу http://pogoda.ngs.ru/json/ возникает ошибка: Notice: file_get_contents() : Content-type not...

11
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
30.11.2015, 20:06
лог ошибки это тайна?
0
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
30.11.2015, 20:13  [ТС]
Лог
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.ja va:300)
at java.util.concurrent.FutureTask.finishCo mpletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setExcep tion(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(Futu reTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.ja va:288)
at java.util.concurrent.FutureTask.run(Futu reTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity has leaked window com.android.internal.policy.impl.PhoneWi ndow$DecorView{52ade674 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRoo tImpl.java:346)
at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(W indowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at loc.alook.AndroidAndSQL.AllProductsActiv ity$LoadAllProducts.onPreExecute(AllProd uctsActivity.java:119)
at android.os.AsyncTask.executeOnExecutor(A syncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.j ava:535)
at loc.alook.AndroidAndSQL.AllProductsActiv ity.onCreate(AllProductsActivity.java:60 )
at android.app.Activity.performCreate(Activ ity.java:5231)
at android.app.Instrumentation.callActivity OnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(Ac tivityThread.java:135)
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handl er.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(Activity Thread.java:5001)
at java.lang.reflect.Method.invokeNative(Na tive Method)
at java.lang.reflect.Method.invoke(Method.j ava:515)
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
30.11.2015, 20:45
могу предположить что продукт не найден и ошибка случается в этих строках
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 потоке
1
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 08:44  [ТС]
Также вылетает при соединении.
Лог
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.ja va:300)
at java.util.concurrent.FutureTask.finishCo mpletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setExcep tion(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(Futu reTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.ja va:288)
at java.util.concurrent.FutureTask.run(Futu reTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity has leaked window com.android.internal.policy.i


Добавлено через 11 часов 33 минуты
up!
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.12.2015, 16:20
почитал еще раз код, в нем же не делается dialog.dismiss();
он остается на экране 100%
0
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 20:24  [ТС]
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);
                }
            });
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.12.2015, 20:30
а вдруг туда дело даже и не доходит, а попадает сюда
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);
0
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
01.12.2015, 21:27  [ТС]
Спасибо за советы, но к сожалению и это не помогло. Прилагаю лог:
Лог

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.ja va:300)
at java.util.concurrent.FutureTask.finishCo mpletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setExcep tion(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(Futu reTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:131)
at loc.alook.AndroidAndSQL.AllProductsActiv ity$LoadAllProducts.doInBackground(AllPr oductsActivity.java:107)
at android.os.AsyncTask$2.call(AsyncTask.ja va:288)
at java.util.concurrent.FutureTask.run(Futu reTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.ru n(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.AllProductsActiv ity has leaked window com.android.internal.policy.impl.PhoneWi ndow$DecorView{52ae5618 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRoo tImpl.java:346)
at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(W indowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at loc.alook.AndroidAndSQL.AllProductsActiv ity$LoadAllProducts.onPreExecute(AllProd uctsActivity.java:119)
at android.os.AsyncTask.executeOnExecutor(A syncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.j ava:535)
at loc.alook.AndroidAndSQL.AllProductsActiv ity.onCreate(AllProductsActivity.java:60 )
at android.app.Activity.performCreate(Activ ity.java:5231)
at android.app.Instrumentation.callActivity OnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(Ac tivityThread.java:135)
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handl er.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(Activity Thread.java:5001)
at java.lang.reflect.Method.invokeNative(Na tive Method)
at java.lang.reflect.Method.invoke(Method.j ava:515)
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
0
 Аватар для FireOwl
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
01.12.2015, 23:24
Проверь объект json сразу после создания на равенство null. Возможно ошибка парсинга ответа.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.12.2015, 11:39
Цитата Сообщение от tkuntubaev Посмотреть сообщение
Спасибо за советы, но к сожалению и это не помогло. Прилагаю лог
да кому нужны эти спасбо, лучше код исправленный покажи
есть подозрение что там вообще ни строчки не поменялось
0
0 / 0 / 0
Регистрация: 04.02.2014
Сообщений: 11
02.12.2015, 13:23  [ТС]
Загрузил базу на сервер, думал может проблема с 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);
                }
            });
 
        }
 
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2015, 13:23
Помогаю со студенческими работами здесь

Дубликация данных при повторном обращении к серверу
при повторном обращении к серверу данные дублируются если обратится в третий раз данные утраиваются и тд.Почему так происходит?

Программа зависает при обращении к серверу в Window.Closing
Вот код: private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (callbacks == null) return; ...

Вылетает программа при обращении к объекту класса
итак, есть абстрактный базовый класс &quot;дерево&quot;, есть два его наследника: плодовое дерево и лесное дерево. Надо написать класс...

Жёсткий диск «вылетает» при обращении к нему
Всем доброго времени суток. Несколько дней назад комп (моноблок Asus ET2410) не загрузился с ошибкой «reboot and select proper boot...

Ошибка HTTP при обращении к серверу. Не могу установить соединение
Здравствуйте, помогите, пожалуйста. Возникла вот такая ошибка, как ее можно исправить?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru