fastLib库是一个android平台通用库,能快速提高项目效率。库地址:fastlib库
这篇博客就以这个库的网络模块的基本使用进行介绍
基本使用
基本请求接口
一个最基本的接口请求由
1.接口方法
2.接口地址
3.返回回调(这个并不是必须的,但是没有返回回调的话我们无法得知请求是否成功也无法根据返回处理事件)
假设我们请求百度并且将返回的数据以字符串形式输出,我们可以这么做
Request request=new Request("get","http://www.baidu.com"); //指明接口方法为get,地址为百度 request.setListener(new SimpleListener<String>(){ //返回回调 @Override public void onResponseListener(Request r,String result){ System.out.println("result:"+result); } }); request.start(); //开始请求
有参数接口
上传参数(包括基本字符串参数和文件)对于fastLib是非常简单的
除了和基本接口一样的代码之外,用红线圈出的3行代码,每行都在请求里放了一个要上传的参数
如果接口是get方法将会自动拼接参数.比如 http://192.168.0.100:8080/FastProject/Test将会被拼接成 http://192.168.0.100:8080/FastProject/Test?name=sgfb&password=123456 其中photo被省略,因为它是个文件
下载文件
和基本请求差不多,注意第二行指定了一个下载器。只要指定了下载器并且链接和网络没问题的情况下文件将会被下载到指定位置
Request request=new Request("get",URL_DOWNLOAD_FILE); //下载文件一般指定为get方法 request.setDownloadable(new DefaultDownload(file)); //指定下载器,最少给予一个File request.setListener(new SimpleListener<String>(){ @Override public void onResponseListener(Request r,String result){ //这里回调不代表下载成功,应自行判断 System.out.println(result); } }); request.start(); //开始请求
高级功能
添加根地址
这一步应放在Application初始化时调用。调用这个方法后所有的Request都会拿这个字段作为根地址
NetManager.getInstance().setRootAddress("http://xxxxx.xxxx");如果有请求不想使用指定好的根地址,比如调用第三方的接口,那么你可以设置Request本身,这个请求讲不使用指定根地址
request.setHadRootAddress(true);
给请求添加head和cookies.获取服务器给予的Header和Cookies
request.putHeader("header1","value1"); request.putSendCookies("cookieName","cookie");//应在返回回调中获取服务器给予的Header和Cookies
Pair<String,String>[] cookies=r.getReceiveCookies(); Map<String,List<String>> header=r.getReceiveHeader();
get请求特殊字符和汉字字符自动转码
网络请求中默认开启了get方法特殊字符和汉字字符转码。举个例子
Request request=new Request("get","http://192.168.0.100:8080/FastProject/Test"); //post传参。如果是get方法的话自动拼接参数 request.put("name","张三"); //上传字符串参数 request.setListener(new SimpleListener<String>(){ //返回回调 @Override public void onResponseListener(Request r, String result) { System.out.println(result); } }); request.start(); //开始请求当请求准备开始的时候,这个链接的参数将会被转换并且拼接成为:http://192.168.0.100:8080/FastProject/Test?name=%E5%BC%A0%E4%B8%89&password=123456
如果不需要这个功能可以关闭它
request.setReplaceChinese(false);
模拟接口
当后台还没写好接口时,我们可以与后台约定好接口返回然后写一个模拟返回器来。假设我们约定接口返回为一段Json
{ "success":true, "message":"信息接收成功", "code":"001", "data":"接口调用成功" }我们写出对应的实体类
public class Result{ public boolean success; public String message; public String code; public String data; }写出对应代码
Request request=new Request(new DefaultMockProcessor( "{" + " \"success\":true," + " \"message\":\"信息接收成功\","+ " \"code\":\"001\"," + " \"data\":\"接口调用成功\"" + "}" )); //使用模拟数据 request.setListener(new SimpleListener<Result>(){ //返回回调 @Override public void onResponseListener(Request r,Result result){ System.out.println("result:"+result); } }); request.start(); //开始请求
fastLib库中自带的DefautMockProcessor支持字符串,文件,Assets中文件。不过它不做任何额外动作处理,仅返回字符串.讲json写成文件存到assets中使用示例
Request request=new Request(new DefaultMockProcessor(new File("test.json"),getAssets())); //使用模拟数据 request.setListener(new SimpleListener<Result>(){ //返回回调 @Override public void onResponseListener(Request r,Result result){ System.out.println("result:"+result); } }); request.start(); //开始请求如果想要更加逼真的使用模拟数据返回功能可以自己实现接口MockProcess。比如一个登陆接口,做了基本的用户名和密码检查
public class UserMockProcessor implements MockProcess{ @Override public byte[] dataResponse(Request request){ Gson gson=new Gson(); Result result=new Result(); Map<String,String> params=request.getParams(); String name=params.get("name"); String password=params.get("password"); if(TextUtils.isEmpty(name)||TextUtils.isEmpty(password)){ result.data="用户名和密码不能为空"; result.success=false; result.code="002"; } else if(!password.equals("123456")){ result.data="密码不正确"; result.success=false; result.code="003"; } else{ result.data="成功返回"; result.success=true; result.code="001"; } return gson.toJson(result).getBytes(); } }
注:
在Listener中除了onTranslateJson方法其他都是在ui线程中,所以不要在里面做耗时和非ui线程支持的任务
这个模块基本不对文件进行检查,所以涉及到文件的上传下载需要仔细检查文件的存在和有效性