Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
#1

Ошибка парсинга данных - Программирование Android

19.05.2016, 08:59. Просмотров 179. Ответов 14
Метки нет (Все метки)

Здравствуйте, пытаюсь через локальный сервер получать данные из БД в виде json.
в LoginActivity по нажатию на кнопку отправляем данные на JSONParser. При запуске приложения на смартфоне, именно по нажатию на кнопу оно закрывается с ошибкой, а android studio выводит следующее(см. скриншот).
листинги двух классов:

LoginActivity
Кликните здесь для просмотра всего текста
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
package ru.mathspace.police;
 
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
 
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.List;
 
//ÀâòîðèçГ*öèÿ ïîëüçîâГ*òåëÿ ГЁ îòïðГ*ГўГЄГ* Г§Г*ïðîñГ* Г*Г* ñåðâåð äëÿ ïîëó÷åГ*ГЁГї Г±ГЇГЁГ±ГЄГ* Г§Г*ÿâîê
public class LoginActivity extends Activity implements View.OnClickListener {
 
    //ГЁГ*äèêГ*òîð ñîñòîÿГ*ГЁГї ïðè Г§Г*ãðóçêå Г¤Г*Г*Г*ûõ
    private ProgressDialog loadDialog;
    //ñîçäГ*ГҐГ¬ ýêçåìïëÿð ГЄГ«Г*Г±Г±Г* JSONParser
    JSONParser jsonParser = new JSONParser();
    EditText pass;
 
    //url, Г*Г* êîòîðîì Г°Г*ñïîëîæåГ* ñåðâåð
    private static String url_server = "http://police/android/list_properties.php";
    public static final String TAG_SUCCESS = "good";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //âêëþ÷Г*ГҐГ¬ îòîáðГ*æåГ*ГЁГҐ activity
        setContentView(R.layout.login);
 
        //ГЁГ*èöèГ*ëèçèðóåì ýëåìåГ*ГІГ» Г*Г*Г·Г*ëüГ*îãî activity
        pass = (EditText) findViewById(R.id.loginPassword);
        String valPass = pass.getText().toString();
        Button logBtn = (Button) findViewById(R.id.loginSubmit);
        logBtn.setOnClickListener(this);
    }
 
    //îáðГ*ГЎГ*ГўГ*ГҐГ¬ Г*Г*Г¦Г*ГІГЁГҐ ГЄГ*îïêè
    @Override
    public void onClick(View v) {
 
        //ïðè Г*Г*Г¦Г*ГІГЁГЁ Г*Г* ГЄГ*îïêó âûçûâГ*ГҐГ¬ ýêçåìïëÿð ГЄГ«Г*Г±Г±Г* createListProperties
        new createListProperties().execute();
    }
 
    //ГґГ®Г*îâГ*Гї Г§Г*Г¤Г*Г·Г* äëÿ ñîçäГ*Г*ГЁГї Г±ГЇГЁГ±ГЄГ* Г§Г*ÿâîê
    class createListProperties extends AsyncTask<String, String, String> {
 
        //äî Г*Г*Г·Г*Г«Г* Г§Г*ãðóçêè ñîçäГ*ГҐГ¬ "ñîñòîÿГ*ГЁГҐ Г§Г*ãðóçêè"
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loadDialog = new ProgressDialog(LoginActivity.this);
            loadDialog.setMessage("Г‡Г*ãðóçêГ* Г§Г*ÿâîê...");
            //âêëþ÷Г*ГҐГ¬ Г*Г*ГЁГ¬Г*öèþ Г§Г*ãðóçêè
            loadDialog.setIndeterminate(true);
            loadDialog.setCancelable(false);
        }
 
        //ñîçäГ*Г*ГЁГҐ Г±ГЇГЁГ±ГЄГ*
        @Override
        protected String doInBackground(String... args) {
            //String valPass = "123";
 
            //äîáГ*âëÿåì ГЇГ*Г°Г*ìåòð Гў ñïèñîê äëÿ îòïðГ*ГўГЄГЁ
            List<NameValuePair> keyPoliceman = new ArrayList<>();
            keyPoliceman.add(new BasicNameValuePair("key", "123"));
            keyPoliceman.add(new BasicNameValuePair("keytwo", "456"));
 
            //ôîðìèðóåì json - îáúåêò
            //(Г*äðåñ ñåðâåðГ*, ГІГЁГЇ ìåòîäГ*, ëèñò Г§Г*Г*Г·ГҐГ*ГЁГ©)
            JSONObject json = jsonParser.makeHttpRequest(url_server,"POST",keyPoliceman);
 
            //ГЇГЁГёГҐГ¬ ëîã Г°Г*áîòû êîìГ*Г*äû
            Log.d("ÑîçäГ*Г*ГЁГҐ Г§Г*ïðîñГ*:", json.toString());
 
            //ïðîâåðÿåì âûïîëГ*ГҐГ*ГЁГҐ ÷åðåç try
            try {
                int good = json.getInt(TAG_SUCCESS);
 
                if(good == 1) {
                    //Г§Г*ГЇГЁГ±Гј ГіГ±ГЇГҐГёГ*Г® äîáГ*âëåГ*Г*, Г§Г*ãðóæГ*ГҐГ¬ activity
                    Intent intent = new Intent(getApplicationContext(), listPropertiesActivity.class);
                    startActivity(intent);
                    //Г§Г*êðûâГ*ГҐГ¬ ГІГҐГЄГіГ№ГЁГ© activity
                    finish();
                } else {
                    //îøèáêГ* Гў äîáГ*âëåГ*ГЁГЁ Г§Г*ГЇГЁГ±ГЁ
                }
            } catch(JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
 
        //Г§Г*êðûâГ*ГҐГ¬ äèГ*ëîãîâîå îêГ*Г® Г§Г*ãðóçêè
        protected void onPostExecute(String url_server) {
            loadDialog.dismiss();
        }
    }
 
}


JSONParser
Кликните здесь для просмотра всего текста
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
package ru.mathspace.police;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.util.Log;
 
/**
 * ГЇГ*ðñåð JSON - îáúåêòîâ
 */
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
 
    // constructor
    public JSONParser() {
 
    }
 
    // ГґГіГ*êöèÿ îòïðГ*âëÿåò Г§Г*ïðîñ Г± Г¤Г*Г*Г*ûìè
    // ìåòîäîì GET èëè POST
    public JSONObject makeHttpRequest(String url, String method,
                                          List<NameValuePair> params) {
            // ñîçäГ*Г*ГЁГҐ HTTP Г§Г*ïðîñГ*
            try {
 
                // ïðîâåðêГ* ГІГЁГЇГ* ìåòîäГ*
                if(method == "POST"){
                    // åñëè ìåòîä = POST, âûïîëГ*ГїГҐГ¬ ñëåäóþùåå:
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(url);
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
 
                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();
 
                }else if(method == "GET"){
                    // åñëè ìåòîä = GET, âûïîëГ*ГїГҐГ¬ ñëåäóþùåå:
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    String paramString = URLEncodedUtils.format(params, "utf-8");
                    url += "?" + paramString;
                    HttpGet httpGet = new HttpGet(url);
 
                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();
                }
 
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
 
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Ïîëó÷èëè ñëåäóþùóþ îøèáêó: " + e.toString());
            }
 
            // ГЇГ*ðñèì ñòðîêó Гў json - îáúåêò
            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "ГЋГёГЁГЎГЄГ* ГЇГ*ðñèГ*ГЈГ* Г¤Г*Г*Г*ûõ: " + e.toString());
            }
 
            // âîçâðГ*Г№Г*ГҐГ¬ json - ñòðîêó Г± Г¤Г*Г*Г*ûìè
            return jObj;
        }
    }


извиняюсь за кодировку в комментариях)
Новичок в java, поэтому даже не понимаю, что и где смотреть. Скорее всего данные не получает, т.е. передает пустой объект
прописанный url точно существует, в нем выводится json-объект, сгенерированный из БД
0
Миниатюры
Ошибка парсинга данных  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2016, 08:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка парсинга данных (Программирование Android):

Обработка результатов парсинга (HtmlParser) - Программирование Android
Добрый день! Сразу оговорюсь, что я начинающий и могу использовать иногда неправильную терминологию. Выполняю следующую задачу: ...

Библиотеки для парсинга json массива - Программирование Android
Всем привет! Подскажите, пожалуйста, какую-нибудь хорошую стороннюю библиотеку для парсинга json массива? Использую IDE Eclipse. ...

Выкачать XML с сервера или сайта для последующего парсинга - Программирование Android
Подскажите как можно выкачать XML из сайта или сервера? скорей всего качаться будет с сайта примерный путь www.sitename.com/XML/file.xml

В чем преимущество использования библиотеки GSON перед стандартными средствами парсинга JSON? - Программирование Android
В чем преимущество использования библиотеки GSON перед JSONObject JSONArray то есть перед стандартными средствами парсинга JSON ??

Ошибка в считывании данных из EditText - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь(ПОЖАЛУЙСТА!!!)? Проблема в том, что я ввожу в EditText правильный...

Ошибка при записи данных в файл - Программирование Android
Помогите пожалуйста!! Вот лог ошибки: java.lang.NullPointerException: Attempt to invoke interface method...

14
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
19.05.2016, 11:01 #2
разрешение в манифесте на интернет прописано?
1
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
19.05.2016, 11:15 #3
Beezy, добрый день!
Что-то у вас нумерация в листинге не совпадает с сообщением об ошибке, вы удалили несколько строк, видимо.
Тем не менее, думаю, что это
Java
1
JSONObject json = jsonParser.makeHttpRequest(url_server,"POST",keyPoliceman);
а значит, один из объектов пуст. По шагам запустите.
1
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
19.05.2016, 13:23  [ТС] #4
Цитата Сообщение от Паблито Посмотреть сообщение
разрешение в манифесте на интернет прописано?
добавил - без изменений.

Цитата Сообщение от CoolMind Посмотреть сообщение
значит, один из объектов пуст. По шагам запустите
хм, вроде все правильно(скриншот)
0
Миниатюры
Ошибка парсинга данных  
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
19.05.2016, 13:45 #5
наверное сервер null возвращает
Java
1
2
JSONObject json = jsonParser.makeHttpRequest(url_server,"POST",keyPoliceman);
if(json ==null){log}
1
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
19.05.2016, 14:10  [ТС] #6
Цитата Сообщение от Valakin Посмотреть сообщение
наверное сервер null возвращает
да, получается с сервера неправильно вывожу?
0
Миниатюры
Ошибка парсинга данных  
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
19.05.2016, 14:21 #7
Цитата Сообщение от Beezy Посмотреть сообщение
да, получается с сервера неправильно вывожу?
Вы уверены, что устройство, которое у вас, заходит на короткий адрес http://police?
Проверьте в браузере на устройстве.
1
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
19.05.2016, 14:27  [ТС] #8
CoolMind, точно, на локальный сервер вообще не зайдет таким образом. А как быть?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
19.05.2016, 14:46 #9
Beezy, надо поглядеть, какой у вас прописывается DNS-суффикс. Это можно увидеть разными способами, можно узнать у админов. Напиши что-то типа: http://police.corp.company, у вас свой суффикс.
1
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
19.05.2016, 15:09  [ТС] #10
CoolMind, спасибо, но легче сервер на хостинг закинуть и присоединиться к ней, либо через локальную сеть.
Проблема же именно в доступе к серверу?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
19.05.2016, 15:12 #11
Beezy, как вам будет удобнее. Да, проблема в доступе к серверу. Но и другие проблемы тоже могут быть (ошибки доступа могут быть разными).
1
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
20.05.2016, 09:07  [ТС] #12
Еще такой вопрос: как правильно передать переменную на сервер?
Я подключился к локальному серверу и принял JSON - объект, с этим все хорошо.
Теперь хочу свое значение, введенное с телефона, подставлять в запрос.
делаю так:
Java
1
2
3
4
5
6
7
8
9
 String valPassPost = "Отправить в php";
 
            //добавляем параметр в список для отправки
            List<NameValuePair> keyPoliceman = new ArrayList<NameValuePair>();
            keyPoliceman.add(new BasicNameValuePair("name", valPassPost));
 
            //формируем json - объект
            //(адрес сервера, тип метода, лист значений)
            JSONObject json = jsonParser.makeHttpRequest(url_server,"POST",keyPoliceman);
0
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
20.05.2016, 09:29  [ТС] #13
вот скриншот
сначала создавал переменную со значением : "Отправить в php", на скрине та же переменная, но со значением : "into php"
0
Миниатюры
Ошибка парсинга данных  
Beezy
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 151
20.05.2016, 15:55  [ТС] #14
Подскажите, пожалуйста, может есть способ проверить значение переменной. Почему NULL выводит, я уверен, что нормально ее передаю
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
20.05.2016, 16:25 #15
Beezy, можно вывести её в лог:
Log.i("*****", json);
0
20.05.2016, 16:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2016, 16:25
Привет! Вот еще темы с ответами:

Ошибка при добавлении данных в список - Программирование Android
Здравствуйте, такой вопрос, у меня список и собственный адаптер, в адаптере размер списка указан от количества элементов в списке String...

Ошибка при работе с базой данных - Программирование Android
скажите почему ошибка при этих строках: sqdb.insert(sms.TABLE_NAME1, sms.NAME1, cv); sqdb.execSQL(&quot;CREATE TABLE &quot; +...

Ошибка при записи данных в SQLite - Программирование Android
Нужно добавить данные в БД SQLite, добавить нужно только текст. Проект запускается, но при нажатии на кнопку программа падает, в чем беда?...

Ошибка при добавлении в базу данных - Программирование Android
Здравствуйте! Я раньше не работал с бд, это мое первое приложение, делал опираясь на урок... Вот такой код в итоге получился: package...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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