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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
#1

GET запрос - Программирование Android

19.07.2013, 18:17. Просмотров 3060. Ответов 11
Метки нет (Все метки)

Доброго времени!
вот пытаюсь сделать 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 запрос
Посмотрите здесь:

Как посмотреть T-SQL запрос который генерирует Entity Framework запрос - C# MVC
как посмотреть T-SQL запрос который генерирует Entity Framework запрос в visual studio 2010, 2012

Как записать запрос так чтобы их запрос суммировался в одну ячейку? - MySQL
Как записать этот запрос так чтобы их запрос суммировался в одну ячейку? Перепробовал все что знал и все что подсказали, не получается ...

Как в Delphi сделать запрос на запрос, база mssql, BDE - Delphi БД
Добрый день! Кто-нибудь может подсказать, как можно Tquery и использовать как таблицу, при написании другого запроса? Заранее спасибо!

Запрос данных из БД. Один большой запрос или много маленьких? - C#
Есть основная форма, на которой расположен TreeView, содержащий щас 30 ветвей. По щелчке на ветке открываются дочерние формы, на каждой в...

Как переделать запрос в цикле на один запрос с фильтром по массиву - 1С Битрикс
Мне говорят: код неправильный, надо запрос ciblockelement::getlist c фильтром по разделу, который в цикле для каждого раздела выполняется...

Как в sql запрос вставить еще один запрос правильно? - PHP БД
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но выдает он следующее: Запрос: SELECT...

Как сделать запрос, что бы найти минимальное число через под ЗАПРОС - SQL Server
Этот запрос у меня считает минимальное время ( сколько часов ведет урок препод), который ведет препод по предметам. Как это сделать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
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
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
19.07.2013, 22:44     GET запрос #4
покажите логи все..
V0v1k
1158 / 982 / 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
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
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
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
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
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
22.07.2013, 12:46     GET запрос #11
если сервер не ваш, то изучайте запрос в браузере
фаербаг поможет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 13:08     GET запрос
Еще ссылки по теме:

Если нужно сделать запрос на добавление, зачем предварительно делать запрос на выборку? - MS Access
Есть таблица: ID_записи, поле1, поле2, поле3. Хотелось бы записать запрос на добавление записи с полем1=!.!. (остальные пустые, кроме...

Как именно можно сделать SQLite запрос, если запрос уже сформирован? - Программирование Android
Здравствуйте. Помогите понять , как именно можно сделать SQLite запрос , если запрос уже сформирован Перечитал кучу информации но не могу...

Как записать этот запрос так чтобы их запрос суммировался в одну ячейку? - MySQL
Как записать этот запрос так чтобы их запрос суммировался в одну ячейку? (SELECT COUNT(goods_id) as count_rows FROM goods WHERE...

Даны 2 запроса. Нужно Если 1 запрос получает результат (проходит) True то выполнить 2 запрос - C#
День добрый. Подскажите как реализовать несложное условие. Даны 2 запроса. Нужно Если 1 запрос получает результат (проходит) True...

при запросе вида «script.php?id=ЗАПРОС» выводить статью под номером «ЗАПРОС» - PHP БД
Написать php-скрипт, который при запросе вида «script.php?id=ЗАПРОС» будет выводить в браузер статью, хранящуюся в базе под номером...


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

Или воспользуйтесь поиском по форуму:
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 запрос
Ответ Создать тему
Опции темы

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