Android开发中的几种网络请求方式详解
Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。
Java.NET包中的HttpURLConnection类
Get方式:
//Get方式请求
publicstaticvoidrequestByGet()throwsException{
Stringpath="https://www.nhooo.com/logins.jsp?id=helloworld&pwd=android";
//新建一个URL对象
URLurl=newURL(path);
//打开一个HttpURLConnection连接
HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();
//设置连接超时时间
urlConn.setConnectTimeout(5*1000);
//开始连接
urlConn.connect();
//判断请求是否成功
if(urlConn.getResponseCode()==HTTP_200){
//获取返回的数据
byte[]data=readStream(urlConn.getInputStream());
Log.i(TAG_GET,"Get方式请求成功,返回数据如下:");
Log.i(TAG_GET,newString(data,"UTF-8"));
}else{
Log.i(TAG_GET,"Get方式请求失败");
}
//关闭连接
urlConn.disconnect();
}
Post方式:
//Post方式请求
publicstaticvoidrequestByPost()throwsThrowable{
Stringpath="https://www.nhooo.com/logins.jsp";
//请求的参数转换为byte数组
Stringparams="id="+URLEncoder.encode("helloworld","UTF-8")
+"&pwd="+URLEncoder.encode("android","UTF-8");
byte[]postData=params.getBytes();
//新建一个URL对象
URLurl=newURL(path);
//打开一个HttpURLConnection连接
HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();
//设置连接超时时间
urlConn.setConnectTimeout(5*1000);
//Post请求必须设置允许输出
urlConn.setDoOutput(true);
//Post请求不能使用缓存
urlConn.setUseCaches(false);
//设置为Post请求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
//配置请求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
//开始连接
urlConn.connect();
//发送请求参数
DataOutputStreamdos=newDataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
//判断请求是否成功
if(urlConn.getResponseCode()==HTTP_200){
//获取返回的数据
byte[]data=readStream(urlConn.getInputStream());
Log.i(TAG_POST,"Post请求方式成功,返回数据如下:");
Log.i(TAG_POST,newString(data,"UTF-8"));
}else{
Log.i(TAG_POST,"Post方式请求失败");
}
}
org.apache.http包中的HttpGet和HttpPost类
Get方式:
//HttpGet方式请求
publicstaticvoidrequestByHttpGet()throwsException{
Stringpath="https://www.nhooo.com/logins.jsp?id=helloworld&pwd=android";
//新建HttpGet对象
HttpGethttpGet=newHttpGet(path);
//获取HttpClient对象
HttpClienthttpClient=newDefaultHttpClient();
//获取HttpResponse实例
HttpResponsehttpResp=httpClient.execute(httpGet);
//判断是够请求成功
if(httpResp.getStatusLine().getStatusCode()==HTTP_200){
//获取返回的数据
Stringresult=EntityUtils.toString(httpResp.getEntity(),"UTF-8");
Log.i(TAG_HTTPGET,"HttpGet方式请求成功,返回数据如下:");
Log.i(TAG_HTTPGET,result);
}else{
Log.i(TAG_HTTPGET,"HttpGet方式请求失败");
}
}
Post方式:
//HttpPost方式请求
publicstaticvoidrequestByHttpPost()throwsException{
Stringpath="https://www.nhooo.com/";
//新建HttpPost对象
HttpPosthttpPost=newHttpPost(path);
//Post参数
List<NameValuePair>params=newArrayList<NameValuePair>();
params.add(newBasicNameValuePair("id","helloworld"));
params.add(newBasicNameValuePair("pwd","android"));
//设置字符集
HttpEntityentity=newUrlEncodedFormEntity(params,HTTP.UTF_8);
//设置参数实体
httpPost.setEntity(entity);
//获取HttpClient对象
HttpClienthttpClient=newDefaultHttpClient();
//获取HttpResponse实例
HttpResponsehttpResp=httpClient.execute(httpPost);
//判断是够请求成功
if(httpResp.getStatusLine().getStatusCode()==HTTP_200){
//获取返回的数据
Stringresult=EntityUtils.toString(httpResp.getEntity(),"UTF-8");
Log.i(TAG_HTTPGET,"HttpPost方式请求成功,返回数据如下:");
Log.i(TAG_HTTPGET,result);
}else{
Log.i(TAG_HTTPGET,"HttpPost方式请求失败");
}
}
以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。完整代码点这里下载:源码下载
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!