希望和您交流,牛X的michaely

liujieyi 发布于 2013/09/20 13:33
阅读 528
收藏 0

尊敬的michaely

     您好!首先非常敬佩您的大作afina 和 您的大才。

     现在我站在一个使用的角度来提一点建议或者小建议吧。希望其他的人不要笑我哦!(*^__^*) 嘻嘻……

     1.能不能在afina的源码中提供一个如何使用afina的demo。README.md中是提供了一些使用的建议或者一点零星的代码。我想一个开源软件肯定想要希望更多的使用者吧,作为一个初学者,希望可以一目了然的看见如何使用。

      afina中FinalHttp和FinalBitmap都有很多的对外的调用接口。一个初学者希望可以看见一个完整的demo,在什么样的情况下,使用什么方法。

      这样可以有利于afina的推广哈!很多后来的开源软件 如ThinkAndroid,都提供了比较完善的demo,这样可以让人有兴趣可以继续研究下去哈!

      2.FinalHttp模块中,调用download方法后,如果是初次下载是会回onSuccess方法的,但是如果是再次下载,就会回调onFailure方法。

         为什么会这样了?如果初次下载,而且成功了,那么这个下载的文件会保存在SDCard中指定的文件目录下的指定文件中。那么如果再次下载,而且保存路径和文件名不变的情况下,应该是默认下载成功吧?为什么会回调onFailure方法呢?是我自己没有调用好,还是软件Afinal就是这样设计的呢?急待尊敬的michaely回答。

      3.FinalHttp模块中,一般的请求是ok的,请求一个url,传递参数都是没问题的。那么作者有没有设计请求webservice这个模块了?

       AjaxParams params = new AjaxParams();
      params.put("username", "michael yang");
      params.put("password", "123456");
      params.put("email", "test@tsz.net");
      params.put("profile_picture", new File("/mnt/sdcard/pic.jpg")); // 上传文件
      params.put("profile_picture2", inputStream); // 上传数据流
      params.put("profile_picture3", new ByteArrayInputStream(bytes)); // 提交字节流
 
      FinalHttp fh = new FinalHttp();
      fh.post("http://www.yangfuhai.com", params, new AjaxCallBack()

      这是作者提供的请求url时传递参数的例子。我们注意到参数params都是以 key--value 形式存放的。而且value可以使String, 文件, 输入流等形式的。我们使用起来也比较方便。

       但是我们在请求一个webservice的时候,我们传递的参数往往是

        <?xml version="1.0" encoding="utf-8"?>
        <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body>
              <getNoticeChasis xmlns="http://inter.webservice.liujie.com/">
              <pageCount xmlns="">1</pageCount>
              <pageSize xmlns="">5</pageSize>
        </getNoticeChasis>
  </soap:Body>
</soap:Envelope>

          这样的一个字符串。而且这个串往往以 字节数组 形式写入的,比如:

String soap = readSoap();
  soap = soap.replaceAll(" \\$pgcount", pageCount);
  soap = soap.replaceAll(" \\$pgsize", pageSize);
   byte[] entity = soap.getBytes();
  
  String path = " http://192.168.1.102:8081/ZhangWebProject/services/InterNoticeChasis";
  HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
  conn.setConnectTimeout(5000);
  conn.setRequestMethod("POST");
  conn.setDoOutput(true);
  conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
  conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
   conn.getOutputStream(). write(entity);

 

     我们注意到,请求一个webservice时,参数就是一个字节数组,这个字节数组,就是 xml 文件的字节数组表示。在这个xml文件中,已经定义好了:调用什么方法,给什么参数传递什么值。 那么就不存在 key--value 的包装参数形式。作者有没有提供一个请求webservice的模块了?还是我们该如何利用现有的FianlHttp模块来自己调用webservice? 急待作者 回答。

    最后,再次感谢 尊敬的michaely,希望大家和作者不要笑我哈。一点点不太成熟的建议!

加载中
0
理工男海哥
理工男海哥

感谢您的如此多的,如此细的“咨询”

1、demo问题,由于afinal还没有出稳定版本,加之个人工作也比较忙,所以目前还没有时间来写demo。

2、下载问题,如果下载成功后,如果再次下载会提示下载失败,故意是这样设计的,因为确实是下载失败了。FinalHttp断点续传去下载文件的时候,如果本地已经有文件了,FinalHttp会读取本地文件长度,然后去请求服务器,只下载文件没有下载的的那部分,但是如果文件已经下载成功,读取的文件大小是等于服务器的文件大小的,这个时候服务器会返回一错误值给客户端。所以下载失败了。 如果要解决这个问题:可以参考以下几种方式:1)不要用断点续传下载文件了,每次都是下载新的文件。2)换一个保存的目录。

3、webservice问题,FinalHttp会在以后的版本中加上来。

0
我是小强
我是小强
下载的行为是有点怪异,webservice支持?有点累,还是用json吧。
liujieyi
liujieyi
webservice是有点累哈,但是有的项目之中还是用的到的,比如一些老的项目对外有一定的接口的。还是webservice哦。谢谢您哈!!
0
liujieyi
liujieyi
首先感谢作者michaely对我的疑问的解答哈!
1.demo问题,在网上有人零零星星的写了一点。但是都是基于你的readme.txt写的。没有什么新意。就这样吧。
2.下载问题,您是这样设计的哦!感觉是不是在断点下载之前可以做一个判断,如果存在同一个目录的同一个文件,能不能默认为下载成功了?个人的一点小看法。呵呵,如果不能实现不要笑话哈。我当时做了一个断点下载,实际上是可以做到这一点的。
3.webservice的确是一个很重要的模块哈,因为有一些老的项目对我预留的有接口。我们在很多地方都要用到webservice的。它的确和FinalHttp有一些区别。期待中。。。。。。
最后再次感谢您,值得尊敬的michaely!!!
返回顶部
顶部