POSTing JSON и получение ответа на Android

71
8

Я пытаюсь отправить сообщение JSON на сайт и вернуть сообщение JSON.
java.net.ProtocolException: метод не поддерживает тело запроса: POST Кто-нибудь знает, что не так? заранее спасибо

                 HttpURLConnection conn=null;
try{
URL url=new URL(urlString);
String userPassword = userName +":" + passWord;
byte[] bytes=Base64.encode(userPassword.getBytes(),Base64.DEFAULT);
String stringEncoding = new String(bytes, "UTF-8");

conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty ("Authorization", "Basic " + stringEncoding);
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
Log.i("Net", "length="+conn.getContentLength());
Log.i("Net", "contentType="+conn.getContentType());
Log.i("Net", "content="+conn.getContent());
conn.connect();

}catch(Exception e){
Log.d("Url Formation Connection", e.toString());
}

//output {try {

            String requestString="{" ";

wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(requestString.toString());
wr.flush();

//input{
BufferedReader rd = null;
String response=" ";

is = conn.getInputStream();
rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer responseBuff = new StringBuffer();
while ((line = rd.readLine()) != null) {
// Process line...
responseBuff.append(line);
}
response = responseBuff.toString();
Log.d("response", response);
}catch(Exception e){
Log.d("buffer error", e.toString());
}finally {
if (is != null) {
try {
wr.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

спросил(а) 2012-10-29T22:45:00+04:00 8 лет назад
1
Решение
81

Возможно, сервер, к которому вы подключаетесь, не позволяет выполнять операции POST. Сначала я попробую GET-запрос, чтобы узнать, есть ли у вас разрешения для этого метода веб-службы.

Кроме того, вы можете испытать удачу с более простым HttpClient, хотя я сам не тестировал это решение: http://www.geekmind.net/2009/11/android-simple-httpclient-to.html

ответил(а) 2012-10-30T17:27:00+04:00 8 лет назад
57

Просто догадайтесь, но можете ли вы попробовать установить:

 conn.setDoOutput(false);

В документации указано: "При необходимости загрузить тело запроса. Экземпляры должны быть настроены с помощью setDoOutput (true), если они включают тело запроса". HttpURLConnection

Поскольку у вас нет ничего в вашем теле, он может также установить значение false.

ответил(а) 2012-10-29T22:56:00+04:00 8 лет назад
41

Документация Android для setRequestMethod минимальна, однако в вашей ошибке указано, что POST не является допустимым методом. Вместо этого попробуйте использовать PUT:

conn.setRequestMethod("PUT");

Также см. Этот пост для любых настроек, которые вам могут понадобиться.

ответил(а) 2012-10-29T23:00:00+04:00 8 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема