HTTP-ответы - Android

1

Я пытаюсь заставить мое приложение опубликовать что-то на своем веб-сервере (находится по 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;
}
}
Теги:
http-headers
httpresponse

1 ответ

2
Лучший ответ

Объект ответа, возвращаемый функцией getEntity(), не включает заголовки ответов, и похоже, что вас интересует. Чтобы получить код состояния, используйте:

response.getStatusLine().getStatusCode()

"Сущность" - это содержимое ответа.

EDIT: выпустить контент из PHP, использовать echo, print_r(), var_dump(), множество других функций и, самое главное, весь текст за пределами тегов <?php...?>.

  • 0
    Ах, я вижу спасибо. Знаете ли вы php-код для установки содержимого ответа?
  • 0
    Попробуйте header("HTTP/1.0 123 somemessage"); согласно php.net/manual/function.header.php
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню