哪一个用于WebService调用-HttpURLConnection或DefaultHttpClient?

时间:2016-02-03 07:53:35

标签: android web-services httpurlconnection

我在我的应用中只使用DefaultHttpClient进行WebService调用。 但是由于不推荐使用DefaultHttpClient,我很困惑该使用什么。 我想为他的进一步发展选择最好的。 如果有任何其他最好的方式来调用WebServices,也建议我。

3 个答案:

答案 0 :(得分:2)

DefaultHttpClient是一种仍然使用的Apache库,但是现在,HttpURLConnection很有推荐,谷歌推荐它,因为它比Apache Library更适合移动应用程序。 DefaultHttpClient也可用于android环境,但在android中,它已被弃用,我们应该使用HttpUrlConnection有很多优点:适合限制android内存,适合电池...... 它会发现使用起来并不困难,下面是一些有用的代码

 URL url = new URL(requestUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(CONNECT_TIME_OUT);
    connection.setReadTimeout(READ_TIME_OUT);
    connection.setUseCaches(false);
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + CHARSET);
    connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParams.getBytes().length));
    if (headers != null) addHeaderFields(connection, headers);
    if (!TextUtils.isEmpty(urlParams)) {
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), CHARSET), true);
        writer.append(urlParams);
        writer.flush();
        writer.close();
    }
    StringBuilder response = new StringBuilder();
    // checks server's status code first
    int status = connection.getResponseCode();
    if (status == HttpURLConnection.HTTP_OK) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
        reader.close();
        connection.disconnect();
    } else {
        throw new ApiException(ApiException.APP_EXCEPTION, "Server returned non-OK status: " + status);
    }
    return response.toString();

答案 1 :(得分:1)

由于Android已弃用DefaultHTTPClient类和方法 Android 6.0版本删除了对Apache HTTP客户端的支持。如果您的应用使用此客户端并定位到Android 2.3(API级别9)或更高版本,请改用HttpURLConnection类。此API更有效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地降低了功耗 要继续使用Apache HTTP API,必须首先在build.gradle文件中声明以下编译时依赖项:

android {
    useLibrary 'org.apache.http.legacy'
}

以下是您可以从中获取有关HttpURLConnection的更多详细信息的URL。 https://developer.android.com/reference/java/net/HttpURLConnection.html

答案 2 :(得分:0)

DefaultHTTPClient在Android中已弃用,Marshmallow(Android 6.0)及其后的API将不再受支持。 HTTPURLConnection优先于HTTPClient。

对于网络操作,我建议您使用Volley,Android官方网络相关的精心调整的图书馆。它简化了网络呼叫的方式,并且速度更快,而且默认情况下它的操作是异步的(您不必担心网络呼叫的自定义线程)。

这是一个使用Volley的好教程:Android working with Volley Library

Volley的Android指南:Transmitting Network Data Using Volley