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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
#1

Отправка запроса на сервер и принять результат - Программирование Android

20.08.2014, 16:47. Просмотров 1878. Ответов 14
Метки нет (Все метки)

Здравствуйте! Такая проблема возникала. Пользователь вводит имя пользователя и пароль и отправляет эти данные на сервер. Но данные почему то не отправляются, не понимаю в чём загвоздка, помогите пожалуйста каким то дельным советом. Вот код
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
class LongOperation extends AsyncTask<String, Void, String> {
                    @Override
                    protected String doInBackground(String... params) {
                        String str="error";
                        String responseString = new String();
                        try {
                            HttpClient client = new DefaultHttpClient();
                            HttpPost request = new HttpPost("http://smktesting.herokuapp.com/api/register");
                            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                            nameValuePairs.add(new BasicNameValuePair("username", etUsername.getText().toString()));
                            nameValuePairs.add(new BasicNameValuePair("password", etPassword.getText().toString()));
                            request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            HttpResponse response = client.execute(request);
                            HttpEntity resEntity = response.getEntity();
                          
                            if (resEntity != null) {
                            str=EntityUtils.toString(resEntity);
                            Log.d(TAG, "line" + response.getStatusLine());
                            
                            }
                        } 
                        catch (UnsupportedEncodingException uee){
                            uee.printStackTrace();
                        } 
                        catch (ClientProtocolException cpe){
                            cpe.printStackTrace();
                        } 
                        catch (IOException ioe){
                            ioe.printStackTrace();
                        }
                          return str;
                    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2014, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отправка запроса на сервер и принять результат (Программирование Android):

Отправка запроса на сервер - получение ответа в xml и обработка - Программирование Android
Всем добрый день. Искал по всем форумам и всем блогам, но нужного ответа не нашел и не добился результата. Отправляется Get запрос...

Отправка get запроса - Программирование Android
Здравствуйте. Уже который день бьюсь с отправкой get запроса и получения ответа. Делаю примерно так: switch (v.getId()) { ...

Отправка POST запроса - Программирование Android
Здравствуйте! Решил попробовать написать приложение на Android. Задачу поставил такую, что надо отправить с android-а на сервер post...

Отправка POST запроса - Программирование Android
Здраствуйте, нужно на сайт отправить пост запрос з логином і паролем, потом сайт оддаст строку, ее нужно вивсти в текствів, у меня есть код...

Отправка POST запроса - Программирование Android
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь на OutputStream os = con.getOutputStream(); в query...

Не работает отправка POST запроса - Программирование Android
try{ HttpClient httpclient = new DefaultHttpClient(); //YOUR PHP SCRIPT ADDRESS HttpPost httppost...

14
waycomm
2 / 2 / 1
Регистрация: 20.07.2014
Сообщений: 18
20.08.2014, 23:25 #2
etUsername и etPassword - это текстовые поля что ли? doInBackground работает в новом потоке, в котором использовать UI элементы нельзя. А приложение не крашится потому, наверное, что какой-то catch отлавливает это исключение
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
21.08.2014, 10:47  [ТС] #3
да это текстовые поля. Значит мне надо просто сохранять данные в переменную типа и работать с ней? Ну ко всему этому нужно ещё писать парсер json?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
21.08.2014, 11:40 #4
Есть же метод onPreExecute(), получите данные из текстовых полей в нем, и далее обрабатывайте в doInBackground()
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
21.08.2014, 11:43  [ТС] #5
хорошо я понял, спасибо! И ещё такой вопрос, надо указывать в хедере Content-Type: application/json или он по умолчанию стоит?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
21.08.2014, 11:45 #6
Цитата Сообщение от AleexBl Посмотреть сообщение
надо указывать в хедере Content-Type: application/json или он по умолчанию стоит?
Нужно.
1
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
22.08.2014, 11:20  [ТС] #7
всё сделал, как говорили выше, записал данные с текстовых полей в переменные типа стринг в методе onPreExecute, указал заголовок, но данные всё равно не передаются и соответственно не парсятся так как парсить то и ничего.
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
class RequestTask extends AsyncTask<String, String, String> {
                    @Override
                    protected void onPreExecute() {                         
                            stUser=etUsername.getText().toString();
                            stPass=etPassword.getText().toString();
                            super.onPreExecute();
                    }
                    @Override
                    protected String doInBackground(String... params) {
                        try {
                            DefaultHttpClient client = new DefaultHttpClient();
                            ResponseHandler<String> res = new BasicResponseHandler();
                            HttpPost request = new HttpPost("http://smktesting.herokuapp.com/api/register");
                            request.setHeader("Content-Type","application/json;charset=UTF-8");
                            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                            nameValuePairs.add(new BasicNameValuePair("username",stUser));
                            nameValuePairs.add(new BasicNameValuePair("password",stPass));
                            request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            String response = client.execute(request, res);
                            Intent intent = new Intent(CreateAcc.this, CreateAcc.class);
                            //то что куда мы будем передавать и что, putExtra(куда, что);
                            intent.putExtra(CreateAcc.JsonURL, response.toString());
                            startActivity(intent);                                               
                            if (response.toString() != null){ 
                            Log.d(TAG, "line");
                            }                           
                        } catch (Exception e) {
                            System.out.println("Exp=" + e);
                    }
                        return null;
                    }
вот что в логах мне выдало
Кликните здесь для просмотра всего текста
XML
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
08-22 06:50:11.803: W/NetworkStats(92): problem reading network stats: java.lang.IllegalStateException: problem parsing line: null
08-22 06:50:34.341: A/NetworkStats(92): problem reading network stats
08-22 06:50:34.341: A/NetworkStats(92): java.lang.IllegalStateException: problem parsing line: null
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:313)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1271)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:810)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:721)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:699)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.access$000(NetworkStatsService.java:128)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService$8.handleMessage(NetworkStatsService.java:1546)
08-22 06:50:34.341: A/NetworkStats(92):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-22 06:50:34.341: A/NetworkStats(92):     at android.os.Looper.loop(Looper.java:137)
08-22 06:50:34.341: A/NetworkStats(92):     at android.os.HandlerThread.run(HandlerThread.java:60)
08-22 06:50:34.341: A/NetworkStats(92): Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)
08-22 06:50:34.341: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:406)
08-22 06:50:34.341: A/NetworkStats(92):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
08-22 06:50:34.341: A/NetworkStats(92):     at java.io.FileReader.<init>(FileReader.java:42)
08-22 06:50:34.341: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:272)
08-22 06:50:34.341: A/NetworkStats(92):     ... 9 more
08-22 06:50:34.341: A/NetworkStats(92): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-22 06:50:34.341: A/NetworkStats(92):     at libcore.io.Posix.open(Native Method)
08-22 06:50:34.341: A/NetworkStats(92):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:98)
08-22 06:50:34.341: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:390)
08-22 06:50:34.341: A/NetworkStats(92):     ... 12 more
08-22 06:50:39.972: A/NetworkStats(92): problem reading network stats
08-22 06:50:39.972: A/NetworkStats(92): java.lang.IllegalStateException: problem parsing line: null
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:313)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1271)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:810)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.updateIfacesLocked(NetworkStatsService.java:721)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.updateIfaces(NetworkStatsService.java:699)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.access$000(NetworkStatsService.java:128)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService$1.onReceive(NetworkStatsService.java:589)
08-22 06:50:39.972: A/NetworkStats(92):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
08-22 06:50:39.972: A/NetworkStats(92):     at android.os.Handler.handleCallback(Handler.java:605)
08-22 06:50:39.972: A/NetworkStats(92):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 06:50:39.972: A/NetworkStats(92):     at android.os.Looper.loop(Looper.java:137)
08-22 06:50:39.972: A/NetworkStats(92):     at android.os.HandlerThread.run(HandlerThread.java:60)
08-22 06:50:39.972: A/NetworkStats(92): Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)
08-22 06:50:39.972: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:406)
08-22 06:50:39.972: A/NetworkStats(92):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
08-22 06:50:39.972: A/NetworkStats(92):     at java.io.FileReader.<init>(FileReader.java:42)
08-22 06:50:39.972: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:272)
08-22 06:50:39.972: A/NetworkStats(92):     ... 11 more
08-22 06:50:39.972: A/NetworkStats(92): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-22 06:50:39.972: A/NetworkStats(92):     at libcore.io.Posix.open(Native Method)
08-22 06:50:39.972: A/NetworkStats(92):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:98)
08-22 06:50:39.972: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:390)
08-22 06:50:39.972: A/NetworkStats(92):     ... 14 more
08-22 07:04:17.701: A/NetworkStats(92): problem reading network stats
08-22 07:04:17.701: A/NetworkStats(92): java.lang.IllegalStateException: problem parsing line: null
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:313)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.server.NetworkManagementService.getNetworkStatsUidDetail(NetworkManagementService.java:1271)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.performPollLocked(NetworkStatsService.java:810)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.performPoll(NetworkStatsService.java:771)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService.access$100(NetworkStatsService.java:128)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.server.net.NetworkStatsService$3.onReceive(NetworkStatsService.java:610)
08-22 07:04:17.701: A/NetworkStats(92):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
08-22 07:04:17.701: A/NetworkStats(92):     at android.os.Handler.handleCallback(Handler.java:605)
08-22 07:04:17.701: A/NetworkStats(92):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 07:04:17.701: A/NetworkStats(92):     at android.os.Looper.loop(Looper.java:137)
08-22 07:04:17.701: A/NetworkStats(92):     at android.os.HandlerThread.run(HandlerThread.java:60)
08-22 07:04:17.701: A/NetworkStats(92): Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)
08-22 07:04:17.701: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:406)
08-22 07:04:17.701: A/NetworkStats(92):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
08-22 07:04:17.701: A/NetworkStats(92):     at java.io.FileReader.<init>(FileReader.java:42)
08-22 07:04:17.701: A/NetworkStats(92):     at com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail(NetworkStatsFactory.java:272)
08-22 07:04:17.701: A/NetworkStats(92):     ... 10 more
08-22 07:04:17.701: A/NetworkStats(92): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-22 07:04:17.701: A/NetworkStats(92):     at libcore.io.Posix.open(Native Method)
08-22 07:04:17.701: A/NetworkStats(92):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:98)
08-22 07:04:17.701: A/NetworkStats(92):     at libcore.io.IoBridge.open(IoBridge.java:390)
08-22 07:04:17.701: A/NetworkStats(92):     ... 13 more
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
22.08.2014, 11:42 #8
Не досмотрел. Нужно по api сервера посмотреть, может ему другой запрос нужен.
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
22.08.2014, 11:51  [ТС] #9
Извините за глупый вопрос конечно, я пока новичок в этом деле, а как нужно сделать? Я думал что DefaultHttpClient, это создать запрос на сервер, потом HttpPost указывает какой должен быть запрос или это не так?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
22.08.2014, 12:06 #10
Все так, сообщение отредактировал.
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
22.08.2014, 12:56  [ТС] #11
хорошо, посмотрю, ну вроде такой запрос я отправлял, приходил нормальный ответ. По коду я так понял ошибок нет, всё должно работать?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
22.08.2014, 13:00 #12
А посмотрите в отладчике после этой строчки
Java
1
String response = client.execute(request, res);
Какое значение у response.
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
22.08.2014, 14:35  [ТС] #13
не могу узнать, оно до того места не доходит. работает только до этой строчки, а на ней exception. Вот что в логах написано 08-22 10:32:02.420: I/System.out(595): Exp=org.apache.http.client.HttpResponseException: INTERNAL SERVER ERROR
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
22.08.2014, 16:11 #14
Вот про ошибку. Видимо запрос не верно составлен. Нужно посмотреть пример работы с этим апи и сравнить. Больше не знаю как узнать верный запрос.
0
AleexBl
0 / 0 / 0
Регистрация: 20.08.2014
Сообщений: 13
22.08.2014, 16:30  [ТС] #15
Спасибо большое за помощь, уже всё исправил. Дело было в том что если это json запрос то и данные надо передавать в таком же виде. Надо было создавать json обьект и методом putjson совать в него данные. Запрос сделал и получил правильный ответ.
0
22.08.2014, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 16:30
Привет! Вот еще темы с ответами:

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

Отправка и получение данных (запроса) из сервера - Программирование Android
Помогите пожалуйста! Мне нужно отправить данные на сервер, желательно чтобы и в ответ сервер что-то отправлял. Мне надо отправить на сервер...

Отправка Post запроса в Android предложении - Программирование Android
Есть определенная php страница надо отправить на нее Post запрос из Android приложения Например на такую страниц...

Отправка nmea на сервер - Программирование Android
Вот таким образом пытаюсь отправить nmea строку на сайт(php) url = &quot;http://213.57.209.92:8080&quot;; client = new DefaultHttpClient(); ...


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

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

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