2016-07-25 3 views
1

Я пытаюсь отправить данные сообщения через HttpURLConnection и, похоже, не отправляет данные сообщения.Android HttpURLConnection написать данные сообщения

Я могу выводить данные через Toast непосредственно перед попыткой отправить запрос POST, но когда я проверяю серверную сторону, он соединяется с файлом PHP, но данные POST пусты.

Итак, я знаю, что данные существуют в jsonObject. Я также знаю, что он делает это в заявлении try catch, но когда я подключаюсь, он не отправляется и не получает должным образом.

try { 
     URL url = new URL(emailURL); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     conn.setDoOutput(true); 

     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("charset", "utf-8"); 
     conn.setRequestProperty("Content-Length", Integer.toString(jsonObject.toString().length())); 
     conn.setUseCaches(false); 

     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

     wr.write(jsonObject.toString()); 

      wr.close(); 

     BufferedReader reader = null; 
     reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while ((line = reader.readLine()) != null) { 
      // Append server response in string 
      sb.append(line + "\n"); 
     } 

     String text = ""; 
     text = sb.toString(); 



    } catch (Exception e) { 

     throw new RuntimeException(e); 
    } 
+1

Вопрос только в том, что есть библиотеки, которые облегчают вашу работу, и вы не используете их или нет? –

+0

Действительно ли? Я новичок в разработке Android, поэтому для меня это совсем не ново. – Rich

+0

попробуйте это: http://loopj.com/android-async-http/ instagram использует это и множество известных приложений, избавляет от боли. –

ответ

0

Попробуйте добавить метод, чтобы убедиться, что он действительно подключается к вашему серверу.

изменить ваш код:

int responseCodeFromServer = -1; 
    try { 
     responseCodeFromServer=conn.getResponseCode(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 

    if (responseCodeFromServer == HttpsURLConnection.HTTP_OK){ 
     BufferedReader reader = null; 
     reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while ((line = reader.readLine()) != null) { 
      // Append server response in string 
      sb.append(line + "\n"); 
     } 

     String text = ""; 
     text = sb.toString(); 
    } 

Так что, если есть что-то неправильно при подключении к серверам, вы увидите исключение.

+0

Что именно вы подразумеваете под «добавлением метода»? – EJP

+0

Я имею в виду добавление условий для обнаружения кода ответа с сервера, см. Переменную responseCodeFromServer. – Afin

0

Ничего не происходит, пока вы не получите код ответа или поток ввода или ошибки. Вы должны сделать одно из этих действий.

NB Вам не нужно устанавливать длину содержимого. Java делает это для вас. Аналогично setDoOutput(true) задает метод запроса POST.

+0

Я думал, что 'setRequestMethod (" POST ");' задает метод запроса :) –

+0

@ cricket_007 Конечно, это так, но OP уже вызывает 'setDoOutput()', что тоже делает. См. Javadoc. – EJP

-1
conn.setRequestProperty("charset", "utf-8"); 
conn.setRequestProperty("Content-Length", Integer.toString(jsonObject.toString().length())); 
conn.setUseCaches(false); 

conn.connect(); // this is missing in your code 

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
+0

'connect()' автоматически. См. Javadoc. Это не пропало. – EJP

+0

JavaDoc говорит: «Объекты URLConnection проходят через две фазы: сначала они создаются, затем подключаются. После создания и перед подключением могут быть указаны различные параметры (например, doInput и UseCaches). После подключения это ошибка чтобы попытаться установить их. Операции, которые зависят от подключения, например, getContentLength, будут неявно выполнять соединение, если это необходимо ». – tyagi

+0

@EJP «connect() НЕ автоматическая». https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#connect%28%29 – tyagi

Смежные вопросы