1

由于与 http 客户端相关的类,我有大量的弃用。

这是我的代码:

    this.httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    HttpResponse response = this.httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    int statusCode = response.getStatusLine().getStatusCode();
     if (statusCode == HttpStatus.SC_OK) {
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(entity.getContent(),
                        EntityUtils.getContentCharSet(entity))
        );
        String line = null;
        Matcher matcher = null;
        while ((line = reader.readLine()) != null) {
            matcher = matcher == null ? this.resultPattern
                    .matcher(line) : matcher.reset(line);
            if (matcher.matches()) {
                httpget.abort();
                return Double.parseDouble(matcher.group(1));
            }
        }
        httpget.abort();
        throw new MyException("Could not find ["
                + resultPattern.toString() + "] in response to [" + url
                + "]");
    } else {
        if (entity != null) {
            entity.consumeContent();
        }
        throw new MyException("Got [" + statusCode
                + "] in response to [" + url + "]");
    }

DefaultHttpClient 弃用 HttpResponse 弃用 HttpEntity 弃用

我该如何修复使用本机库?我已经搜索了一些人HttpClient使用HttpClientBuilder,但需要一个额外的库,此外我不知道如何解决其他弃用问题。

有没有可以帮助我的程序员?这种大规模弃用的原因是什么?

似乎现在我们应该使用HttpURLConnection,但我还不明白如何将我的代码迁移到这些库中。

4

4 回答 4

0

正如 Google文档所说,您仍然可以使用 HTTP Apache API 接口。在 gradle.build 文件中声明以下依赖项:

android {
    useLibrary 'org.apache.http.legacy'
}
于 2015-09-22T07:31:03.003 回答
0

我该如何修复使用本机库?

在这种情况下,我不知道您认为“本机库”是什么。Android 的内置版本 HttpClient 在 Android 5.1 中已被弃用,并且在 M Developer Preview 中被完全删除。

如果您需要坚持使用 Apache HttpClient API,请切换到Apache 的库版本

或者,切换到任意数量的其他 HTTP API,例如内置的HttpUrlConnectionOkHttp

这种大规模弃用的原因是什么?

几年来,谷歌已经表明你不应该使用 HttpClient ;他们现在只是在执行这一点。

于 2015-07-21T12:04:06.917 回答
0

我已经构建了一个使用标准 Java 库的 HttpUtil 类。你可以修改它。我只是将所有内容设置为地图,然后您可以轻松发送帖子或获取。

HttpURLConnection urlConnection;
String CHAR_ENCODING = "UTF-8";
String CONTENT_TYPE_X_WWW_FORM = "application/x-www-form-urlencoded;charset=UTF-8";

public String sendHttpPostRequestWithParams(String url, Map<String, Object> httpPostParams) {
    try {
        byte[] postDataBytes = setParameters(httpPostParams).toString().getBytes(CHAR_ENCODING);

        URL post = new URL(url);
        urlConnection = (HttpURLConnection) post.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Accept-Charset", CHAR_ENCODING);
        urlConnection.setRequestProperty("Content-Type", CONTENT_TYPE_X_WWW_FORM);
        urlConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        urlConnection.getOutputStream().write(postDataBytes);

        return convertStreamToString(urlConnection.getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
        return Constants.GSON.toJson(new BaseResponse(ResponseCodes.SERVICE_NOT_FOUND.getCode(),
                ResponseCodes.SERVICE_NOT_FOUND.getMessage()));
    }
}

public String sendHttpGetRequestWithParams(String stringUrl, Map<String, Object> params) {
    try {
        URL url = new URL(stringUrl + "?" + setParameters(params));
        urlConnection = (HttpURLConnection) url.openConnection();

        return convertStreamToString(urlConnection.getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
        return Constants.GSON.toJson(new BaseResponse(ResponseCodes.SERVICE_NOT_FOUND.getCode(),
                ResponseCodes.SERVICE_NOT_FOUND.getMessage()));
    }
}

public String setParameters(Map<String, Object> params) {
    try {
        StringBuilder parameters = new StringBuilder();
        for (Map.Entry<String, Object> param : params.entrySet()) {
            if (parameters.length() != 0) {
                parameters.append('&');
            }
            parameters.append(URLEncoder.encode(param.getKey(), CHAR_ENCODING));
            parameters.append('=');
            parameters.append(URLEncoder.encode(String.valueOf(param.getValue()), CHAR_ENCODING));
        }
        return parameters.toString();
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
}

public String convertStreamToString(InputStream inputStream) {
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String temp, response = "";
        while ((temp = reader.readLine()) != null) {
            response += temp;
        }
        return response;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
于 2015-07-21T13:03:51.190 回答
-1

如果您正在为 Android 开发,您应该已经迁移到 Volley,这会好得多。这些方法已被弃用,我记得没有其他本机库。

于 2015-07-21T12:01:21.170 回答