Java Android HttpURLConnection, как получить ответ 401

Я делаю приложение для Android, которое будет подключаться к веб-серверу с использованием аутентификации xauth. Моя проблема в том, что я не могу получить ответ, если сервер возвращает 401, что вызывает исключение Java.

Мне нужен этот ответ, чтобы понять, что я делаю не так.

Во-первых, подходит ли HttpURLConnection для такого рода вещей. Во-вторых, как я могу получить ответ?

URL u_rl = new URL(url);
    final HttpURLConnection connection =
        (HttpURLConnection) u_rl.openConnection();

    connection.setRequestMethod(method);

    if (authorization != null) {
        connection.setRequestProperty("Authorization", authorization);
    }
    final byte[] body = parameters.getBytes();

        connection.setRequestProperty(
            "Content-Length", Integer.toString(body.length));
        connection.setDoOutput(true);
        connection.connect();
        final OutputStream output = connection.getOutputStream();
        output.write(body);
        output.flush();
        System.out.println(connection.getResponseCode());
        if (connection.getResponseCode() != 200) {
            result.put("error", connection.getResponseCode()+"");
            return null;
        }

        String out = IOUtils.toString(connection.getInputStream());

Я знаю, почему я получаю 400 или другой код ответа, проблема в том, что пользователь не знает, почему. Сервер возвращает мне ошибку в JSON, и я хотел бы получить этот код JSON, даже если код ответа не равен 200


person buliq    schedule 21.07.2012    source источник
comment
Вы должны опубликовать немного кода?   -  person SALMAN    schedule 21.07.2012
comment
Если мой ответ ниже поможет вам, пожалуйста, примите мой ответ и проголосуйте за меня, это будет очень признательно. Спасибо :)   -  person SALMAN    schedule 21.07.2012
comment
Выложил код, но он не имеет ничего общего с моей проблемой, я думаю?   -  person buliq    schedule 23.07.2012


Ответы (1)


Довольно сложно сказать об ошибке в вашем коде, если вы ее не предоставите. Я предлагаю вам использовать этот ответ, который наверняка вам поможет.

 InputStream retrieveStream(String url) {

        DefaultHttpClient client = new DefaultHttpClient();

        HttpGet getRequest = new HttpGet(url);

        try {

            HttpResponse getResponse = client.execute(getRequest);
            final int statusCode = getResponse.getStatusLine().getStatusCode();

            if (statusCode != HttpStatus.SC_OK) {
                Log.w(getClass().getSimpleName(), "Error " + statusCode
                        + " for URL " + url);
                return null;
            }

            HttpEntity getResponseEntity = getResponse.getEntity();
            return getResponseEntity.getContent();

        } catch (IOException e) {
            getRequest.abort();
            Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
        }

        return null;

    }

И используйте этот код для преобразования входного потока в читаемый формат данных String.

BufferedReader r = new BufferedReader(new InputStreamReader(retrieveStream("YOU URL")));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
    total.append(line);
}

Спасибо :)

person SALMAN    schedule 21.07.2012
comment
Это не решает мою проблему, потому что в: if (statusCode!= HttpStatus.SC_OK) {Log.w(getClass().getSimpleName(), Error + statusCode + for URL + url); return null;} Я все еще не могу получить ответ в формате JSON с сервера - person buliq; 23.07.2012
comment
Не могли бы вы указать URL-адрес, по которому вы нажимаете . Спасибо :) - person SALMAN; 23.07.2012