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

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

Войти
Регистрация
Восстановить пароль
 
NEvOl
15 / 14 / 0
Регистрация: 13.08.2012
Сообщений: 689
#1

GET запрос - Android

16.02.2015, 14:11. Просмотров 703. Ответов 10
Метки нет (Все метки)

Уважаемые, подскажите пожалуйста что делаю не так ?
Посылаю GET запрос:
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
package com.example.notificationapp.mySql;
 
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
 
import com.example.notificationapp.parser.JSONParser;
import com.example.notificationapp.MainActivity;
 
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 CheckCustomer {
 
    JSONParser jsonParser = new JSONParser();
 
    // url получения списка всех продуктов
    private static String url_customer_detials = "http://customers.ru/get_customer_details.php";
 
    // JSON параметры
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_CUSTOMER = "customer";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_NUMBER = "number";
 
    private String number;
    private Context context;
 
    ProgressDialog pDialog;
 
    public void onCreate(String number, Context context) {
        this.number = number;
        this.context = context;
        Log.d("myLog", "CheckCustomer.onCreate");
 
        new GetProductDetails().execute();
    }
 
 
    class GetProductDetails extends AsyncTask<String, String, String> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Loading product details. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
            Log.d("myLog", "pDialog.show()");
        }
 
        protected String doInBackground(String[] params) {
 
            // проверяем статус success тега
            Log.d("myLog", "doInBackground(String[] params)");
            int success;
            try {
                // Список параметров
                List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
                paramsList.add(new BasicNameValuePair("number", number));
                // получаем продукт по HTTP запросу
                Log.d("myLog", "paramsList= "+paramsList.toString());
                JSONObject json = jsonParser.makeHttpRequest(url_customer_detials, "GET", paramsList);
                Log.d("myLog", json.toString());
 
                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
 
                    Log.d("myLog", "продукт с nomber найден");
                    
                }else{
                    Log.d("myLog", "продукт с nomber не найден");
                    // продукт с nomber не найден
                }
            } catch (JSONException e) {
                Log.d("myLog", "JSONException");
                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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.example.notificationapp.parser;
 
import android.util.Log;
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 java.io.*;
import java.util.List;
 
public class JSONParser {
 
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
 
    // constructor
    public JSONParser() {
 
    }
 
    // метод получение json объекта по url
    // используя HTTP запрос и методы POST или GET
    public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
 
        // Создаем HTTP запрос
        try {
 
            // проверяем метод HTTP запроса
            if(method == "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"){
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                Log.d("myLog", "url= "+url);
                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();
            Log.d("myLog", "sb= "+sb.toString());
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
 
        // пытаемся распарсить строку в JSON объект
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
 
        // возвращаем JSON строку
        return jObj;
 
    }
 
}
лог получаю такой:
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
......................................................................................
02-16 11:01:48.121      620-620/com.example.notificationapp D/myLog﹕ Name:
    Number: 2147483647
02-16 11:01:48.141      620-620/com.example.notificationapp D/myLog﹕ CheckCustomer.onCreate
02-16 11:01:48.210      620-620/com.example.notificationapp D/myLog﹕ pDialog.show()
02-16 11:01:48.221      620-634/com.example.notificationapp D/myLog﹕ doInBackground(String[] params)
02-16 11:01:48.221      620-634/com.example.notificationapp D/myLog﹕ paramsList= [number=2147483647]
02-16 11:01:48.231      620-634/com.example.notificationapp D/myLog﹕ url= [url]http://customers.ru/get_customer_details.php?number=2147483647[/url]
02-16 11:01:48.290      620-620/com.example.notificationapp W/EGL_emulation﹕ eglSurfaceAttrib not implemented
02-16 11:02:03.600      620-634/com.example.notificationapp D/myLog﹕ sb= <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL /get_customer_details.php was not found on this server.</p>
    </body></html>
02-16 11:02:03.610      620-634/com.example.notificationapp E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
02-16 11:02:03.610      620-634/com.example.notificationapp W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x40a13300)
02-16 11:02:03.630      620-634/com.example.notificationapp E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.NullPointerException
            at com.example.notificationapp.mySql.CheckCustomer$GetProductDetails.doInBackground(CheckCustomer.java:79)
            at com.example.notificationapp.mySql.CheckCustomer$GetProductDetails.doInBackground(CheckCustomer.java:48)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
************at java.util.concurrent.FutureTask.run(FutureTask.java:137)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
************at java.lang.Thread.run(Thread.java:856)
02-16 11:02:05.160      620-620/com.example.notificationapp E/WindowManager﹕ Activity com.example.notificationapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@411ef250 that was originally added here
    android.view.WindowLeaked: Activity com.example.notificationapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@411ef250 that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:374)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
            at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
            at android.view.Window$LocalWindowManager.addView(Window.java:547)
            at android.app.Dialog.show(Dialog.java:277)
            at com.example.notificationapp.mySql.CheckCustomer$GetProductDetails.onPreExecute(CheckCustomer.java:60)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
            at android.os.AsyncTask.execute(AsyncTask.java:534)
            at com.example.notificationapp.mySql.CheckCustomer.onCreate(CheckCustomer.java:44)
            at com.example.notificationapp.MainActivity.onClick(MainActivity.java:113)
            at android.view.View.performClick(View.java:4084)
            at android.view.View$PerformClick.run(View.java:16966)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            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:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
02-16 11:02:06.730      620-634/com.example.notificationapp I/Process﹕ Sending signal. PID: 620 SIG: 9
если в браузере вызвать:
http://customers.ru/get_customer_det...ber=2147483647
то все окей работает, никаких ошибок, настрицу находит
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2015, 14:11     GET запрос
Посмотрите здесь:

Post запрос Android
SQL запрос Android
Android SQLite запрос
Android не работает запрос
GET запрос Android
Android GET запрос
Android PUT запрос
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,593
Записей в блоге: 2
16.02.2015, 14:19     GET запрос #2
сразу при просмотре кода заметно что нету

RequestProperty

постом что нужно отправлять ? JSON?
Java
1
.setRequestProperty("Content-Type", "application/json");
Иногда из-за этих якобы мелочей бывают проблемы...
NEvOl
15 / 14 / 0
Регистрация: 13.08.2012
Сообщений: 689
16.02.2015, 14:30  [ТС]     GET запрос #3
ILNAR_93,
но у меня URLConnection вообще ведь не используется, или я не понял про что вы значит.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.02.2015, 14:59     GET запрос #4
У вас не сработал get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /get_customer_details.php was not found on this server.</p>
</body></html>
И в браузере я получил 404, вот и jsonObject не создался и вылетел с NullPointer
Проверьте правильность запроса и работу сервера
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,593
Записей в блоге: 2
16.02.2015, 15:00     GET запрос #5
NEvOl, в твоем случае setHeader...
Это предположения только) - возможно проблема вовсе в другом...
NEvOl
15 / 14 / 0
Регистрация: 13.08.2012
Сообщений: 689
16.02.2015, 15:00  [ТС]     GET запрос #6
Nixy, я работаю пока с локальным сервером через денвер. Может в этом проблема ? нужно где-то указать это ?
То что он не работает я понимаю, но не понимаю почему, я пробовал перейти по тому URL который выше в Log'е. Все работает у меня.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.02.2015, 15:05     GET запрос #7
Проверьте String запроса полученный через дебаг в браузере если возвращает JSON то будем смотреть дальше, а пока Вам прилетело 404
NEvOl
15 / 14 / 0
Регистрация: 13.08.2012
Сообщений: 689
16.02.2015, 15:07  [ТС]     GET запрос #8
Nixy,
вот что возвращает в браузере:
{"success":1,"message":"Customer is exist!","customer":[{"id":"1","name":"Sergey","number":"2147483647","created_at":"2015-02-16 15:29:55","updated_at":"0000-00-00 00:00:00"}]}

пхп скрипт:
PHP
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
<?php
 
$response = array();
 
require 'db_connect.php';
 
$db = new DB_CONNECT();
 
if (isset($_GET["number"])) {
    $number = $_GET['number'];
 
    $result = mysql_query("SELECT * FROM customers WHERE number = $number");
 
    if (!empty($result)) {
        if (mysql_num_rows($result) > 0) {
 
            $result = mysql_fetch_array($result);
 
            $customer = array();
            $customer["id"] = $result["id"];
            $customer["name"] = $result["name"];
            $customer["number"] = $result["number"];
            $customer["created_at"] = $result["created_at"];
            $customer["updated_at"] = $result["updated_at"];
            
            $response["success"] = 1;
            $response["message"] = "Customer is exist!";
            $response["customer"] = array();
 
            array_push($response["customer"], $customer);
 
            echo json_encode($response);
        } else {
            $response["success"] = 0;
            $response["message"] = "Customer is not exist!";
 
            echo json_encode($response);
        }
    } else {
        $response["success"] = 0;
        $response["message"] = "Customer is  not found";
 
        echo json_encode($response);
    }
} else {
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";
 
    echo json_encode($response);
}
?>
androbro
319 / 279 / 55
Регистрация: 17.10.2014
Сообщений: 827
16.02.2015, 15:42     GET запрос #9
NEvOl,
Цитата Сообщение от NEvOl Посмотреть сообщение
вот что возвращает в браузере:
в браузере телефона то?
NEvOl
15 / 14 / 0
Регистрация: 13.08.2012
Сообщений: 689
16.02.2015, 15:49  [ТС]     GET запрос #10
androbro, в браузере эмулятора пишет так же: Not found
The requested URL /get_customer_details.php was not found on this server.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2015, 15:57     GET запрос
Еще ссылки по теме:

Android GET запрос
Android Как именно можно сделать SQLite запрос, если запрос уже сформирован?
POST запрос Android
HttpURLConnection запрос Android
Android Get - запрос

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

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.02.2015, 15:57     GET запрос #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
На эмуляторе попросту может не быть соединения с вашим сервером.
Yandex
Объявления
16.02.2015, 15:57     GET запрос
Ответ Создать тему
Опции темы

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