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