#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);
}
}