AndroidHttpClient详解及调用示例
什么是AndroidHttpClient
AndroidHttpClient是一个基于Apache HttpClient的AndroidHTTP客户端,它可以帮助我们更加轻松地使用HTTP/HTTPS来访问网络资源。在Android 6.0及以上版本中,AndroidHttpClient被标记为过时,我们应该更多地使用HttpURLConnection来进行网络请求,但在一些特殊情况,例如需要进行HTTP的身份认证,AndroidHttpClient仍然是一个不错的选择。
AndroidHttpClient的使用
创建AndroidHttpClient实例
我们可以通过如下方式来创建一个AndroidHttpClient实例:
AndroidHttpClient httpClient = AndroidHttpClient.newInstance("My-User-Agent");
第一个参数是客户端的User-Agent,第二个参数是一个可选的HttpClientParams对象。
发送HTTP请求
以发送GET请求为例,我们可以这样调用:
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet);
其中url是你要请求的完整的网址。通过httpClient.execute()方法发送请求,并将HttpResponse对象返回。
处理HTTP响应
HttpResponse对象包含了HTTP响应的各种信息,包括响应状态码、响应头、响应体等等。我们可以通过以下方法获取它们:
int statusCode = response.getStatusLine().getStatusCode();
Header[] headers = response.getAllHeaders();
HttpEntity entity = response.getEntity();
getStatusLine()方法会返回一个StatusLine对象,调用它的getStatusCode()方法可以获取HTTP响应的状态码。
调用getAllHeaders()方法可以获取响应头,返回一个Header数组。
调用getEntity()方法可以获取响应体,返回一个HttpEntity对象。
关闭AndroidHttpClient实例
在完成所有请求后,我们需要关闭AndroidHttpClient实例:
httpClient.close();
AndroidHttpClient的完整示例
以下是一个简单的AndroidHttpClient的使用示例,它可以通过指定的url向某个服务器发出GET请求,获取该服务器返回的数据,然后将数据显示到TextView上。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final String URL = "https://www.baidu.com/";
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
String result = executeGet(URL);
mTextView.setText(result);
}
private String executeGet(String url) {
AndroidHttpClient httpClient = AndroidHttpClient.newInstance(TAG);
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
return result;
} else {
Log.e(TAG, "请求出错,返回状态码:" + statusCode);
}
} catch (IOException e) {
Log.e(TAG, "请求失败,异常原因:" + e.getMessage(), e);
} finally {
httpClient.close();
}
return null;
}
}
在代码中,我们首先通过AndroidHttpClient.newInstance()方法创建了一个AndroidHttpClient实例。然后,我们创建一个HttpGet对象,并调用httpClient.execute()方法来发送请求。最后,我们通过HttpResponse对象的getEntity()方法获取响应体,并将其转化成字符串。
AndroidHttpClient示例说明
示例一:调用百度翻译API
通过AndroidHttpClient来调用百度翻译API,我们可以将中文翻译成英文。以下是一个简单的示例:
private String executeGet(String url, String query) {
AndroidHttpClient httpClient = AndroidHttpClient.newInstance(TAG);
String appId = "你的APP ID";
String appKey = "你的密钥";
String salt = String.valueOf(System.currentTimeMillis());
String sign = DigestUtils.md5Hex(appId + query + salt + appKey);
String urlWithParams = url + "?q=" + query + "&from=auto&to=en&appid=" + appId + "&salt=" + salt + "&sign=" + sign;
HttpGet httpGet = new HttpGet(urlWithParams);
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
return result;
} else {
Log.e(TAG, "请求出错,返回状态码:" + statusCode);
}
} catch (IOException e) {
Log.e(TAG, "请求失败,异常原因:" + e.getMessage(), e);
} finally {
httpClient.close();
}
return null;
}
在这个方法中,我们首先向url拼接了请求参数,包含了我们要翻译的文本、翻译源语言、翻译目标语言等信息。然后,我们像之前介绍的那样使用AndroidHttpClient.sendRequest()方法发送请求,并处理它的响应结果。
示例二:上传文件
在AndroidHttpClient中,上传文件是比较简单的,只需要构建一个MultipartEntity对象,将文件内容加入其中即可。以下是一个简单的示例:
private String executePost(String url, File file) {
AndroidHttpClient httpClient = AndroidHttpClient.newInstance(TAG);
HttpPost httpPost = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", new FileBody(file));
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
try {
HttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity responseEntity = httpResponse.getEntity();
String result = EntityUtils.toString(responseEntity, "UTF-8");
return result;
} else {
Log.e(TAG, "请求出错,返回状态码:" + statusCode);
}
} catch (IOException e) {
Log.e(TAG, "请求失败,异常原因:" + e.getMessage(), e);
} finally {
httpClient.close();
}
return null;
}
在这个方法中,我们对于要上传的文件创建了一个FileBody对象并将其加到了一个MultipartEntityBuilder对象中。然后,我们将MultipartEntityBuilder对象构造为一个HttpEntity,并将其赋值给HttpPost对象的entity成员变量,最后像之前一样使用AndroidHttpClient发出请求并处理响应结果。
注意:对于上传文件,需要在AndroidManifest.xml中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
同时其应用场景较少,推荐使用更安全的方式进行文件上传。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AndroidHttpClient详解及调用示例 - Python技术站