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方式请求失败"); } }
以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。完整代码点这里下载:源码下载
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!