2016-05-30 2 views
0

Я создаю приложение для запроса/ответа на вопросы. У меня возникла проблема с запросом POST, когда я задаю вопросы.Не удается отправить правильный запрос POST в Java (Android Studio)

Я пытался использовать что-то вроде этого в терминале

curl -H "Content-Type: application/json" -d '{"firstName":"Chris", "lastName": "Chang", "email": "[email protected]"}' http://your-app-name.herokuapp.com/contacts 

, и она работала хорошо.

Но когда я пытаюсь отправить запрос POST в AndroidStudio, мои параметры (такие как имя, фамилия, адрес электронной почты и т. Д.) Не будут отправляться. Я попытался использовать https://github.com/kevinsawicki/http-request. Запрос отправляется (я знаю, потому что он показывает дату запроса), но без каких-либо параметров.

Что следует изменить в моем коде, чтобы оно работало правильно?

Map<String, String> data = new HashMap<String, String>(); 
data.put("firstName", "Gena"); 
data.put("lastName", "Bukin"); 
if (HttpRequest.post("https://safe-citadel-91138.herokuapp.com/questions").form(data).created()) 
System.out.println("User was created"); 
+0

Информации, которая находится в Hashmap не посылать на сервер (или возможно, это отправить, но запрос создан неправильно) –

+1

Вы попробовали отправить его с помощью Volley? –

+0

Если вы переходите к [link] (https://safe-citadel-91138.herokuapp.com/questions), вы можете видеть, что первые 3 запроса были отправлены с терминала, а другие были отправлены с Java –

ответ

0

Я только что попытался создать пользователя, и он сработал. Вы можете обновить link u, чтобы поделиться созданным пользователем.

Это то, что я попытался

String endPoint= "https://safe-citadel-91138.herokuapp.com/questions"; 
     try { 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost post = new HttpPost(endPoint); 
      post.addHeader("Content-Type", "application/json"); 
      JSONObject obj = new JSONObject(); 

      obj.put("firstName", "TESTF"); 
      obj.put("lastName", "TESTL"); 
      obj.put("email", "[email protected]"); 

      StringEntity entity = new StringEntity(obj.toString()); 
      post.setEntity(entity); 
      HttpResponse response = httpClient.execute(post); 
}catch (Exception e){ 

     } 

UPDATE

КСТАТИ Я использовал JSon баночку из this ссылки

+0

Спасибо, много! кстати, андроид удалил поддержку HTTP-клиента Apache –

+0

@ValentinaPakhomova рада! это помогло! – Raghavendra

0

В основном ваши curl запросы отправляет пользовательские данные в формате JSON в теле запроса. Ваш Java-код пытается отправить данные в запросе в виде данных формы, которые являются чем-то другим и, вероятно, не приняты сервером.

Вы, возможно, потребуется изменить код, чтобы использовать HttpRequest.send(...) метод вместо form:

JSONObject json = new JSONObject(); 
json.put("firstName", "Gena"); 
json.put("lastName", "Bukin"); 
json.put("email", "[email protected]"); 

HttpRequest 
    .post("https://safe-citadel-91138.herokuapp.com/questions") 
    .contentType("application/json") 
    .send(json.toString()); 

Далее в curl называют вы используете доступ к другой URL, чем в Java фрагмент кода http://your-app-name.herokuapp.com/contacts против https://safe-citadel-91138.herokuapp.com/questions может быть, вы разговаривая с неверным конечным пунктом?

Возможно, вы захотите взглянуть на некоторую библиотеку сопоставления Java на JSON, такую ​​как gson для преобразования ваших объектов Java в надлежащий JSON или использовать класс JSONObject для Android.

UPDATE:

  • Добавлена ​​ссылка gson для отображения JSON
  • Изменено фрагмент кода использовать JSONObject для отображения JSON
0

попробовать эту надежду, он будет работать

public JSONObject getJSONFromUrl(String url_, JSONObject jsonObject) { 

    try { 
     URLConnection urlConn; 
     DataOutputStream printout; 

     URL url = new URL(url_); 
     urlConn = url.openConnection(); 
     urlConn.setDoInput(true); 
     urlConn.setDoOutput(true); 
     urlConn.setConnectTimeout(30000); 
     urlConn.setReadTimeout(30000); 
     urlConn.setUseCaches(false); 
     urlConn.setRequestProperty("Content-Type", "application/json"); 
     urlConn.setRequestProperty("Accept", "application/json"); 

     urlConn.setRequestProperty("Authorization", "token"); // If Applicable 
     urlConn.connect(); 
     printout = new DataOutputStream(urlConn.getOutputStream()); 
     printout.writeBytes(jsonObject.toString()); 
     printout.flush(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 

     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     printout.close(); 
     reader.close(); 
     json = sb.toString(); 
    } catch (SocketException e) { 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    Applog.e("response", jObj + ""); 
    return jObj; 

} 
0

Попробуйте вот так ..

Map<String, Object> params = new LinkedHashMap<>(); 
params.put("firstName", "Gena"); 
params.put("lastName", "Bukin"); 


JSONObject jsonObject = POST("https://safe-citadel-91138.herokuapp.com/questions", params); 
    /** 
     * Method allows to HTTP POST request to the server to send data to a specified resource 
     * @param serverURL URL of the API to be requested 
     * @param params parameter that are to be send in the "body" of the request Ex: parameter=value&amp;also=another 
     * returns response as a JSON object 
     */ 
     public JSONObject POST(String serverURL, Map<String, Object> params) { 
      JSONObject jsonObject = null; 
      try { 
       URL url = new URL(serverURL); 

       Log.e(TAG, params.toString()); 
       StringBuilder postData = new StringBuilder(); 

       for (Map.Entry<String, Object> param : params.entrySet()) { 
        if (postData.length() != 0) postData.append('&'); 
        postData.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
        postData.append('='); 
        postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); 
       } 
       Log.e("POST", serverURL + ":" + params.toString()); 
       byte[] postDataBytes = postData.toString().getBytes("UTF-8"); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setRequestProperty("Content-Type", "application/json"); 
       connection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); 
       connection.setRequestMethod("POST"); 
       connection.setConnectTimeout(5000); 
       connection.setUseCaches(false); 
       connection.setDoOutput(true); 
       connection.getOutputStream().write(postDataBytes); 
       connection.connect(); 

       int statusCode = connection.getResponseCode(); 
       if (statusCode == 200) { 
        sb = new StringBuilder(); 
        reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
        String line; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
       } 
       jsonObject = new JSONObject(sb.toString()); 
      } catch (Exception e) { 
       //e.printStackTrace(); 
      } 
      return jsonObject; 
     } 
Смежные вопросы