Я пытаюсь заставить мое приложение опубликовать что-то на своем веб-сервере (находится по IP 10.0.2.2) и получить ответ. Я использую объект HttpHelper для выполнения всех методов взаимодействия с сервером. На данный момент моя переменная ответа ничего не возвращает. Через отладку я знаю, что цикл:
while ((line = rd.readLine()) != null) {
никогда не вводится, но его нужно ввести, потому что он должен правильно получить строку "ОК"?
Большое спасибо за вашу помощь!
Код веб-страницы:
header("HTTP/1.1 200 OK");
Код java:
List<NameValuePair> data = new ArrayList<NameValuePair>();
HttpHelper httpHelper = new HttpHelper("http://10.0.2.2/", data);
StringBuilder response = httpHelper.postData();
...
public class HttpHelper {
final HttpClient client;
final HttpPost post;
final List<NameValuePair> data;
public HttpHelper(String address, List<NameValuePair> data) {
client = new DefaultHttpClient();
post = new HttpPost(address);
this.data = data;
}
private class GetResponseTask extends AsyncTask<Void, Void, StringBuilder> {
protected StringBuilder doInBackground(Void... arg0) {
try {
HttpResponse response = client.execute(post);
return inputStreamToString(response.getEntity().getContent());
} catch (ClientProtocolException e) {
Log.e("debug", e.getLocalizedMessage());
} catch (IOException e) {
Log.e("debug", e.getLocalizedMessage());
}
return null;
}
}
public StringBuilder postData() {
try {
post.setEntity(new UrlEncodedFormEntity(data));
return (new GetResponseTask().execute()).get();
} catch (UnsupportedEncodingException e) {
Log.e("debug", e.getLocalizedMessage());
} catch (InterruptedException e) {
Log.e("debug", e.getLocalizedMessage());
} catch (ExecutionException e) {
Log.e("debug", e.getLocalizedMessage());
}
return null;
}
private StringBuilder inputStreamToString(InputStream is)
throws IOException {
String line = "";
StringBuilder total = new StringBuilder();
// Wrap a BufferedReader around the InputStream
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
// Read response until the end
while ((line = rd.readLine()) != null) {
Log.v("debug", "top of readlineloop");
total.append(line);
Log.v("debug-readline", line);
}
// Return full string
return total;
}
}
Объект ответа, возвращаемый функцией getEntity(), не включает заголовки ответов, и похоже, что вас интересует. Чтобы получить код состояния, используйте:
response.getStatusLine().getStatusCode()
"Сущность" - это содержимое ответа.
EDIT: выпустить контент из PHP, использовать echo
, print_r()
, var_dump()
, множество других функций и, самое главное, весь текст за пределами тегов <?php...?>
.
header("HTTP/1.0 123 somemessage");
согласно php.net/manual/function.header.php