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

GET запрос - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
19.07.2013, 18:17     GET запрос #1
Доброго времени!
вот пытаюсь сделать GET запрос на сервер но приложение падает.
для запроса создаю отдельный AsyncTask. но на строчке
Java
1
HttpResponse httpResponse = httpClient.execute(httpGet);
приложение валится. я знаю что работать с сетью нужно в отдельном потоке. но AsyncTask и есть отдельные поток. или я ошибаюсь?
вот кусок кода где происходит ошибка:
Java
1
2
3
4
5
6
7
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();
подскажите плиз, в чем проблемма.

Добавлено через 1 час 37 минут
добрался до стека, в ошибках пишет примерно сл.:
"Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null ..."
а какой хост в каких параметрах?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2013, 18:17     GET запрос
Посмотрите здесь:

Post запрос Android
SQL запрос Android
Android SQLite запрос
Android не работает запрос
GET запрос Android
Android GET запрос
Android PUT запрос
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
19.07.2013, 22:12     GET запрос #2
покажите как вы формируете строку url

а вообще GET запрос тут есть рабочий пример в 10 посте
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
19.07.2013, 22:42  [ТС]     GET запрос #3
в конечном итоге строка запроса передается сл.
"http://my.supersite.com/data/customers/login?email=eema%40sitemail.com&pass=1234" настоящий адрес и почта изменены.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
19.07.2013, 22:44     GET запрос #4
покажите логи все..
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2013, 00:29     GET запрос #5
пермишены на интернет прописаны?
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 11:19  [ТС]     GET запрос #6
Цитата Сообщение от V0v1k Посмотреть сообщение
пермишены на интернет прописаны?
да, конечно. и на интернет и на ВиФи )

Добавлено через 2 минуты
вот полный лог. если он чем то поможет. лично я ничего не могу понять.
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
07-22 10:02:36.329    4013-4112/com.almareks.anvizion          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.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=my.supersite.com/data/customers/login
        at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
        at com.almareks.anvizion.JSONParser.makeHttpRequest(JSONParser.java:62)
        at com.almareks.anvizion.LoginActivity$UserLoginTask.loadJSON(LoginActivity.java:344)
        at com.almareks.anvizion.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:292)
        at com.almareks.anvizion.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:249)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        ... 5 more
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
22.07.2013, 11:42     GET запрос #7
покажите вашу функцию doInBackground
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 12:25  [ТС]     GET запрос #8
ну там все просто:
Java
1
2
3
4
5
 @Override
        protected JSONObject doInBackground(String... urls)
        {
            return loadJSON(urls[0]);
        }
и вот:
Java
1
2
3
4
5
6
7
8
9
10
11
public JSONObject loadJSON(String url)
        {
            JSONParser jParser = new JSONParser();
            // здесь параметры необходимые в запрос добавляем
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("email", "mail@mypochta.com"));
            params.add(new BasicNameValuePair("pass", "1234"));
            // посылаем запрос методом GET
            JSONObject json = jParser.makeHttpRequest(url, "GET", params);
            return json;
        }
Добавлено через 21 минуту
разобрался. нужно было создавать конструктором с HttpHost-ом. т.е. вот как здесь:
Java
1
2
3
HttpHost httpHost = new HttpHost("my.supersite.com");
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpHost, httpGet);
но теперь он возвращает не JSON объект, а html страницу вот такого содержания:
HTML5
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.23 (CentOS) Server at hivizion.com Port 80</address>
</body></html>
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
22.07.2013, 12:33     GET запрос #9
doInBackground должна возвращать void ( не уверен, но так работает, по крайне мере)
сделайте так лучше
а результат записывайте в объекты класса, чтобы не парится с ретурном( тк ретурн void)
попробуйте так
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
private class sendSomeData extends AsyncTask<Void, Void, Void> {
            private boolean error = false;
                    private JSONObject ans;
            public sendSomeData() {
 
            }
            @Override
            protected Void doInBackground(Void... params) {             
                try {
 
JSONParser jParser = new JSONParser();
            // здесь параметры необходимые в запрос добавляем
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("email", "mail@mypochta.com"));
            params.add(new BasicNameValuePair("pass", "1234"));
            // посылаем запрос методом GET
            ans = jParser.makeHttpRequest(url, "GET", params);
 
                } catch (ClientProtocolException e) { 
                   error = true;
                } catch (IOException t) {
                    error = true;
                }
                return null;
                
            }
 
            @Override
            protected void onPostExecute(Void result) {           
                if(error) {
                    Log.d("22", "error");
                    return; 
                }
                Log.d("answer",ans);
            }
            
        }
Добавлено через 2 минуты
дак там сервер говорит что не понял вашего запроса, поэтому он и не отослал строку json
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 12:36  [ТС]     GET запрос #10
Цитата Сообщение от spydark91 Посмотреть сообщение
попробуйте так
попробую. но не думаю что в этом проблема. т.к. запрос уже выполняется (как я уже написал выше, я нашел проблему) но сервер его почему то не понимает, хотя через браузер работает. нужно еще ковырять.
spydark91
84 / 84 / 2
Регистрация: 03.03.2011
Сообщений: 1,872
22.07.2013, 12:46     GET запрос #11
если сервер не ваш, то изучайте запрос в браузере
фаербаг поможет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 13:08     GET запрос
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 13:08  [ТС]     GET запрос #12
вообщем... проблема разрешилась.
изучив запросы и ответы сервера в браузере пришёл к выводу:
1. нужно передавать HttpHost "my.supersite.com"
2. в запросе нужно адрес писать с "http://..." типа так - "http://my.supersite.com/.......".
не знаю это зависит от реализации сервера или вообще так должно быть но у меня все заработало.
Yandex
Объявления
22.07.2013, 13:08     GET запрос
Ответ Создать тему
Опции темы

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