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

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

19.07.2013, 18:17. Просмотров 3370. Ответов 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 ..."
а какой хост в каких параметрах?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2013, 18:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос GET запрос (Программирование Android):

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

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

Как посмотреть T-SQL запрос который генерирует Entity Framework запрос
как посмотреть T-SQL запрос который генерирует Entity Framework запрос в visual...

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

Как в sql запрос вставить еще один запрос правильно?
Есть длинный запрос, в котором можете даже не разбираться если не хотите, но...

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

11
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
19.07.2013, 22:12 #2
покажите как вы формируете строку url

а вообще GET запрос тут есть рабочий пример в 10 посте
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
19.07.2013, 22:42  [ТС] #3
в конечном итоге строка запроса передается сл.
"http://my.supersite.com/data/customers/login?email=eema%40sitemail.com&pass=1234" настоящий адрес и почта изменены.
0
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
19.07.2013, 22:44 #4
покажите логи все..
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
20.07.2013, 00:29 #5
пермишены на интернет прописаны?
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 11:19  [ТС] #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
0
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
22.07.2013, 11:42 #7
покажите вашу функцию doInBackground
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 12:25  [ТС] #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>
0
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
22.07.2013, 12:33 #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
1
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 12:36  [ТС] #10
Цитата Сообщение от spydark91 Посмотреть сообщение
попробуйте так
попробую. но не думаю что в этом проблема. т.к. запрос уже выполняется (как я уже написал выше, я нашел проблему) но сервер его почему то не понимает, хотя через браузер работает. нужно еще ковырять.
0
spydark91
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
22.07.2013, 12:46 #11
если сервер не ваш, то изучайте запрос в браузере
фаербаг поможет
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.07.2013, 13:08  [ТС] #12
вообщем... проблема разрешилась.
изучив запросы и ответы сервера в браузере пришёл к выводу:
1. нужно передавать HttpHost "my.supersite.com"
2. в запросе нужно адрес писать с "http://..." типа так - "http://my.supersite.com/.......".
не знаю это зависит от реализации сервера или вообще так должно быть но у меня все заработало.
0
22.07.2013, 13:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 13:08
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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