2016-10-08 2 views
1

Я делаю это:Android POST запрос не работает

@Override 
protected Void doInBackground(String... strings) { 

    try { 
     String query = "username=" + strings[0] + "&duration=" + strings[1] + "&distance=" + strings[2]; 
     URL url = new URL(ScoresActivity.URL); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 
     Writer writer = new OutputStreamWriter(conn.getOutputStream()); 
     writer.write(query); 
     writer.flush(); 
     writer.close(); 
     /*conn.addRequestProperty("username", strings[0]); 
     conn.addRequestProperty("duration", strings[1]); 
     conn.addRequestProperty("distance", strings[2]);*/ 
     Log.v(TAG, strings[0] + " - " + strings[1] + " - " + strings[2]); 
     //conn.connect(); 
    } catch(Exception e) { 
     Log.e(TAG, "exception", e); 
    } 

    return null; 
} 

но запрос просто не действует на сервере ... на сервере я должен видеть данные отправлены, но я не увидеть их

Я также попытался это:

curl -XPOST --data "username=duri&duration=600&distance=555" http://someurl.com/ 

и это работает ... что может быть проблема?

+0

Вы проверили, что он не попадает в блок 'catch (Exception e)? –

+1

Да, я отлаживал его, шаг за шагом, и он прошел через блок «try» – durisvk

ответ

4

эй попробуйте использовать этот синтаксис.

@Override 
     protected String doInBackground(String... params) { 

      String urlString = params[0]; 
      String userName = params[1]; 
      String password = params[2]; 
      URL url = null; 
      InputStream stream = null; 
      HttpURLConnection urlConnection = null; 
      try { 
       url = new URL(urlString); 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setRequestMethod("POST"); 
       urlConnection.setDoOutput(true); 

       String data = URLEncoder.encode("userName", "UTF-8") 
         + "=" + URLEncoder.encode(userName, "UTF-8"); 

       data += "&" + URLEncoder.encode("password", "UTF-8") + "=" 
         + URLEncoder.encode(password, "UTF-8"); 

       urlConnection.connect(); 

       OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream()); 
       wr.write(data); 
       wr.flush(); 

       stream = urlConnection.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"), 8); 
       String result = reader.readLine(); 
       return result; 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
      } 

      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
       Log.i("Result", "SLEEP ERROR"); 
      } 
      return null; 
     } 

Надеюсь, это поможет. :)

+3

. Да, проблема была в том, что я ничего не читал у читателя потока, поэтому запрос не был отправлен ... не забывайте всегда читать 'BufferedReader', чтобы заставить все работать, даже если вам не нужен результат ... – durisvk

+0

У меня была такая же проблема, я не понимал, что вы не можете просто запустить и забыть запрос. –

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