当前位置:操作系统 > 安卓/Android >>

Android实战开发---请求接口获取数据

 

上文中我们看过了项目的整体框架,趁着写接口的间隙,和大家一起研究一下读取接口的类:XMLTool.java。

 

 

 

说实话,自己的项目名字感觉起的都不怎么好,XMLTool很容易让人以为是与XML有关的工具,谁也不会想到是请求接口的一系列方法,这里以后肯定要改进,这回我们还是以代码分析为主。

 

 

 

在这个类中,我们有几个主要的方法,分别是GetXmlValue、PostXmlValue、DeleteXmlValue、UploadImagFile、ReturnXMLValue、DownloadFile2SDCard、GetInputStreamFromUrl这七个方法。基本上常用的请求操作都用到了,从名字应该可以看出大概的作用,下面我们一一说明,并指出其中的一些主要代码。

 

 

 

我们的接口是REST格式,也就是有四种状态get获取数据、post新增/修改数据、put修改数据(未用)、delete删除数据。

 

 

 

1.  GetXmlValue

 

这个方法很明显,是用来进行get提交并取得数据。使用的是比较常用的方法,大家看看代码也就明白了:

 

 

StringBuffer sbResult = new StringBuffer(); 

 

 // 创建一个http客户端 

 

 HttpClient client = new DefaultHttpClient(); 

 

 // 创建一个GET请求 

 

 HttpGet httpGet = new HttpGet(url); 

 

 // 向服务器发送请求并获取服务器返回的结果 

 

 HttpResponse response = null; 

 

 // 返回的结果可能放到InputStream,http Header中等。 

 

 InputStream inputStream = response.getEntity().getContent(); 

 

 // 读取内容 

 

 BufferedReader br = new BufferedReader(new InputStreamReader( 

 

        inputStream, "utf-8")); 

 

 String data = ""; 

 

 if (sbResult.toString().equalsIgnoreCase("")) { 

 

     while ((data = br.readLine()) != null) { 

 

        sbResult.append(data); 

 

     } 

 

 } 

 

 inputStream.close(); 

这段代码应该是网络上比较常见的了,也不用我过多的解释了。

 

 

 

2.       PostXmlValue

 

这个是使用post提交数据,用于新增、修改数据。其中主要是参数的添加,这里我从外面传入一个HashMap并转为List<BasicNameValuePair>,代码如下:

 

 

   …… 

 

    // 创建一个POST请求 

 

   HttpPost httpPost = new HttpPost(url); 

 

 

 

   //添加post参数 

 

   List<BasicNameValuePair> dataList = new ArrayList<BasicNameValuePair>(); 

 

   Iterator<Map.Entry<String, String>> i = param.entrySet().iterator(); 

 

   while (i.hasNext()) { 

 

       Map.Entry<String, String> o = (Map.Entry<String, String>) i.next(); 

 

       dataList.add(new BasicNameValuePair(o.getKey().toString(), o.getValue().toString())); 

 

   } 

 

   HttpEntity entity = entity = new UrlEncodedFormEntity(dataList, "UTF-8"); 

 

httpPost.setEntity(entity); 

 

…… 

 

 

3.       DeleteXmlValue

 

Delete方法就比较简单了,和get方法类似,不过就是将HttpGet改成HttpDelete对象而已。

 

 

// 创建一个Delete请求 

 

HttpDelete httpDelete = new HttpDelete(); 

 

 

4.       UploadImagFile

 

这是一个上传图片的方法,主要是上传一些小的图片文件之类,用的也是比较普遍的二进制流的上传方式。

 

 

 

将文件读取到一个FileInputStream对象中,然后通过DataOutputStream的write方法写入请求中,这里要注意的是一些参数的添加,比如上传的文件名怎么定义之类的。

 

 

sb1.append("Content-Disposition: form-data; name=\"do_img\"; filename=\""+ file.getName() + "\"" + LINEND); 

outStream.write(sb1.toString().getBytes()); 

其实这段代码自己也是似懂非懂,我们就留作最后的提高部分供大家探讨,也希望有高手能将这段代码全标上注释供大家理解。

 

 

 

5.       ReturnXMLValue

 

这个方法就是在上面的GetXmlValue中的// 返回的结果可能放到InputStream,http Header中等。后面那一段,因为每个请求都会用到,所以提了出来。

 

 

 

6.       DownloadFile2SDCard

 

这个方法应该看名字能看出来,下载文件到手机卡上。

 

其中FileTool是另外一个工具类,用于一些文件的创建、查找方面的工作,我们以后再介绍,这里只是取得inputstream后调用FileTool中的方法来进行操作,所以就不多介绍,留待以后介绍FileTool类时再说。

 

 

 

7.       GetInputStreamFromUrl

 

获取连接inputstream方法,返回的是conn.getInputStream()。

 

 

 

这就是我用来请求接口的类,其实还是比较粗糙的,但基本功能都没问题,而且在上一版本的使用中也并没有出现过什么问题,因此还算是比较好用的一个工具类。下面附上全部的代码供参考。

 

 

 

 

package hb.hbwb.tools; 

 

/**

 * @name XML数据处理类

 * @author zhang.yue

 * @create_date 20110512

 * @last_edit_author zhang.yue

 * @last_edit_date 20111115

 * @remark

 * @edit_remark 优化代码

 */ 

 

import hb.hbwb.R; 

import hb.hbwb.finals.SystemFinals; 

 

import java.io.BufferedReader; 

import java.io.DataOutputStream; 

import java.io.File; 

import java.io.FileInputStream; 

import java.io.IOException; 

  

import java.io.InputStream; 

import java.io.InputStreamReader; 

import java.net.HttpURLConnection; 

import java.net.URI; 

import java.net.URL; 

 

import java.util.ArrayList; 

import java.util.HashMap; 

import java.util.Iterator; 

import java.util.List; 

import java.util.Map; 

 

import org.apache.http.HttpEntity; 

import org.apache.http.HttpResponse; 

import org.apache.http.client.HttpClient; 

import org.apache.http.client.entity.UrlEncodedFormEntity; 

import org.apache.http.client.methods.HttpDelete; 

import org.apache.http.client.methods.HttpGet; 

import org.apache.http.client.methods.HttpPost; 

import org.apache.http.impl.client.DefaultHtt

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,