Почтовый запрос Android

#java #javascript #android #http #post

#java #javascript #Android #http #Публикация

Вопрос:

У меня есть код javascript, который я пытаюсь имитировать в приложении для Android:

Вот код javascript:

 text = '{"username":"Hello","password":"World"}';
x.open("POST", url);
x.setRequestHeader("Content-type", "application/json");
x.setRequestHeader("Content-length", text.length);
x.send(text);
  

и вот что у меня есть до сих пор для приложения Android (не работает):

 HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url);                   
httppost.setHeader("Content-type", "application/json");
String text = ""{"username":"Hello","password":"World"}"";
httppost.setHeader("Content-length",Integer.toString(text.length()));
httppost.setEntity(new StringEntity(text));
HttpResponse response = httpclient.execute(httppost); 
  

когда я пытаюсь отладить этот код в eclipse, эмулятор продолжает работать, пока отладчик зависает. Спасибо!

Примечание: он висит на httpclient.execute(httppost)

Комментарии:

1. Можете ли вы сказать, на какой строке он висит?

2. @KurtisNusbaum последняя строка второго фрагмента

3. Вы проверили подключение эмуляторов к Интернету?

4. @Mike G не устанавливайте заголовок «Content-length» … это будет сделано для вас через StringEntity

Ответ №1:

Вот код, который я использую для запросов Android post:

 HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("fullurl");

List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("parameter", "variable");
post.setEntity (new UrlEncodedFormEntity(pairs));

HttpResponse response = client.execute(post);
  

….. и так далее.

Комментарии:

1. его запрос JSON в предоставленном вами коде не добавляет заголовки.

Ответ №2:

Попробуйте это сделать:

 HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url);  
JSONObject json = new JSONObject();
try{
      json.put("username", "Hello");
      json.put("password", "World");
      StringEntity se = new StringEntity(json.toString());  
      se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
      post.setEntity(se);
      HttpResponse response = httpclient.execute(httppost); 
      /*Checking response */
      if(response!=null){
          InputStream in = response.getEntity().getContent(); //Get the data in the entity

}
catch(Exception e){
    e.printStackTrace();
}
  

Ответ №3:

Вы имели в виду установить для вашего пути HttpPost значение just path . Я думаю, что вы зависли, потому что вы не указали HttpPost действительный URL-адрес. Вам нужно будет изменить эту строку:

 HttpPost httppost = new HttpPost("path"); 
  

к чему-то вроде

 HttpPost httppost = new HttpPost("actual/url/path"); 
  

Комментарии:

1. я заменил URL-адрес на path только для целей отображения. его нет в моем коде soucr

2. Я вижу, и вы подтвердили, что URL-адрес действителен и работает с компьютера, на котором вы работаете?

Ответ №4:

У вас есть дополнительные речевые метки в начале и конце вашей текстовой строки по сравнению с версией JS?

Ответ №5:

  // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(StringUrl);

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));



        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        System.out.println("rep => "   response);


    } catch (IOException e) {
       System.out.println(e);
    }
}