1

xauth認証を使用してWebサーバーに接続するAndroidアプリを作成しています。私の問題は、サーバーが Java 例外を引き起こす 401 を返した場合、応答を得られないことです。

何が間違っているのかを知るために、その応答が必要です。

まず第一に、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 でエラーを返すので、応答コードが 200 でなくてもその JSON コードを取得したい

4

1 に答える 1

2

あなたがそれを提供しない限り、あなたのコードのバグについて伝えるのはかなり難しいです。むしろ、この回答を使用することをお勧めします。

 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;

    }

このコードを使用して、入力ストリームを文字列で読み取り可能なデータ形式に変換します。

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

ありがとう :)

于 2012-07-21T16:49:32.647 に答える