Android开发——获取服务器返回的xml文件


1.控制层里面的代码:
   里面有详细的注释代码
 
 private static final String TAG="GetXMLTest";
 public void getXMLTest() throws Exception {
   //因为我们的NetTool函数请求网页的方式是get,那么我们的path里面就需要带参数了。
   String path = "http://211.143.108.6/wap/ResCatService?act=pic&s=h";//如果参数是中文,必须进行Url进行编码
   // 如URLEncoder.encode(s, enc
   //将要请求的页面Path和网页的编码传递到NetTool类中,返回一个String类型的值。先看看getTextContent是怎么处理的。
  String xml = NetTool.getTextContent(path, "UTF-8");
  //getTextContent方法做了些什么?就是将服务器返回的数据流转换成了字符串。
  //建立一个文件输出流,准备将得到的字符串存到本地的手机上。
  /**先拆分一下代码:
   * FileOutputStream outstream = new FileOutputStream(
   *  new File(Environment.getExternalStorageDirectory(),"test.xml"));
   *等于一下代码
   * File file1 = new File(dir, name); 实例化一个File文件
   * dir参数就是Environment.getExternalStorageDirectory()
   * Environment.getExternalStorageDirectory()===等于==="/sdcard"。就是手机卡的内存卡的地址
   * name参数是test.xml
   *然后将为file1实例化一个输出流。
   * FileOutputStream Stream =new FileOutputStream(file1);
   */
  FileOutputStream outstream = new FileOutputStream(
    new File(Environment.getExternalStorageDirectory(),"test.xml"));
  //准备写出输出流
  OutputStreamWriter writer = new  OutputStreamWriter(outstream);
  //将xml字符串写到文件里面去
  writer.write(xml);
  //写完之后,推出去。用文件浏览器看看有没有保存到文件~~~~
  writer.flush();
  //关闭。
  writer.close();
  Log.i(TAG, xml);
 }
 
2.看看业务层的代码,有两个方法
  public static  String getTextContent( String urlpath,String encoding) throws Exception {
   //可以看到,getTextContent接收到了目前还处于字符串形似的path,和编码。
   //将字符串形式的path,转换成一个url
   URL url = new URL(urlpath);
   //得到url之后,将要开始连接网络,以为是连接网络的具体代码
   //首先,实例化一个HTTP连接对象conn
   HttpURLConnection conn = (HttpURLConnection)url.openConnection();
   //定义请求方式为GET,其中GET的大小写不要搞错了。
   conn.setRequestMethod("GET");
   //定义请求时间,在ANDROID中最好是不好超过10秒。否则将被系统回收。
   conn.setConnectTimeout(6*1000);
   //请求成功之后,服务器会返回一个响应码。如果是GET方式请求,服务器返回的响应码是200,post请求服务器返回的响应码是206(貌似)。
   if(conn.getResponseCode()== 200){
    //返回码为真
    //从服务器传递过来数据,是一个输入的动作。定义一个输入流,获取从服务器返回的数据
    InputStream inStream = conn.getInputStream();
    //得到输入流的数据之后,调用readStream方法对输入流进行处理。返回的一个字节数组。
    //按ctrl进入readStream方法,看看readStream是怎么处理的
    byte[] data = readStream(inStream);
    //得到返回值。那么readStream主要做了些什么?readStream主要处理了将服务器返回的数据写到内存这个工作,也就是保存到了本地(我觉得)。
    //以字符串形式的返回。String(data,encoding)是个知识点。
   return new String(data,encoding);
   } 
   return null;
  } 
 
方法2:
public static  byte[] readStream(InputStream inStream) throws Exception{
   //readStream获得了传递进来的输入流
   //要返回输入流,就需要定义一个输出流。
   //定义一个字节数组型的输出流,ByteArrayOutputStream
   ByteArrayOutputStream outStream = new ByteArrayOutputStream();
   //建立一个缓冲区buffer
   byte[] buffer = new byte[1024];
   int len= -1;
   //将输入流不断的读,并放到缓冲区中去。直到读完
   while((len=inStream.read(buffer))!=-1){
    //将缓冲区的数据不断的写到内存中去。边读边写
    outStream.write(buffer, 0, len);
   }
   outStream.close();
   inStream.close();
   //将输出流以字节数组的方式返回
   return outStream.toByteArray();
  } 
 
 总结一下:
      虽然整个代码是做出来了,但是还是要巩固一下:
     回想一下整个流程:
   1.得到请求服务器的url地址的参数,
   2.发送请求,得到返回的响应码
   3.判断响应码是不是GET方式
   4.将得到的输入流读取,并返回一个字符串。
   5.新建一个文件,将得到的字符串作为数据填充到文件中。
   恩~~流程大概是这样的了~~~
  不过,以上的流程有个鸟用。稍微有点常识的人都知道怎么做。。。。具体一点,具体一点。具体一点。
  详细一点:
  为什么要写那么类,那么多方法。完成这样的一个功能,完全只要一个类即可搞定。
  因为~~~额~~因为什么呢~·mvc三层架构这是一个比较合理的解释吧。也有利代码的管理和重复使用不是。
  好,我们开始整个获取xml流程之旅吧~·
 1.得到一个url和网页的编码
 2.将url和encoding传到业务层的方法gettext中
 3.gettext方法中  建一个HttpURLConnection连接对象,请求服务器
 4.在gettext方法中 判断返回码时候是你请求的方式,这里是200码
 5.在gettext方法中  获取服务器返回的输入流
 6.在readStream中 读取输入流,返回字符串
 7.现在又返回到控制层
 8.新建一个文件
 9.新建一个文件输出流
 10.将返回的字符串写到文件里
 11.查看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值