android基于http通信的库
完整文档参见:https://github.com/xuhengfei/slovef-sdk
slovef-sdk
==========
Android客户端与后台服务通过http协议进行交互时,使用slovef-sdk可以使得编程更加简单
客户端与服务端,一个http请求,我们就认为是一个API
*发起http请求
*实现http登陆失效后的自动登陆
*实现http请求的模拟返回
*图片下载与缓存
##如何发起一个API请求
创建一个自定义Api类,继承ConnectApi
```java
/**
*此API用于查询当前是否已经登陆
*预期返回的结果是json格式
*成功:{login:true}
*失败:{login:false}
*/
publicclassIsLoginApiimplementsConnectApi<Boolean>{
publicHttpUriRequestgetHttpRequest(){
//Http请求基于HttpClient,因此需要拼装一个HttpUriRequest
HttpUriRequestreq=newHttpGet("http://xxx.com/islogin.do");
returnreq;
}
publicResponseParser<Boolean>getResponseParser(){
returnnewJsonParser<Boolean>(){
publicBooleanparse(JSONObjectjson)throwsException{
returnjson.optBoolean("login");
}
};
}
}
```
发起Http请求,并获取结果
```java
HttpMgrhttpMgr=newHttpMgr();
IsLoginApiapi=newIsLoginApi();
BooleanisLogin=httpMgr.execute(api);
System.out.println(isLogin);
```
##实现http登陆失效后的自动登陆
使用http协议与服务端交互,一般都需要登陆。
登陆信息在经过一段时间后,可能会过期失效,如果此时再发起需要登陆验证的请求,就会失败了
我们需要实现,当session失效时,自动进行一次登陆行为,登陆成功后再对之前的请求进行重试
这里我们通过自己实现一个HttpMgr里面的FailStrategy来完成自己的一个请求失败处理策略
```java
classMyAutoLoginStrategyextendsAutoLoginStrategy{
publicbooleanisLogin(HttpResponseresp){
//根据相应结果判定,是否已登陆
returnfalse;
}
@Override
publicbooleandoLogin(HttpMgrhttpMgr){
try{
returnhttpMgr.executeOnce(newLoginApi("zhangsan","12345"));
}catch(Exceptione){
e.printStackTrace();
}
returnfalse;
}
}
```
以上代码继承了AutoLoginStrategy,AutoLoginStrategy中已经实现了自动重试等功能,具体参见源码
在此处,只需要写清楚如何发起登陆请求即可
##实现http请求的模拟返回
客户端和后台一般都是同时进行开发的
当服务器端还没有提供好Api接口,而客户端需要使用时,就需要对服务器端的Api进行模拟
slovef-sdk提供非常方便的http请求模拟框架
*创建一个需要模拟返回的Api,将此Api类实现HttpMockable接口
*实现HttpMockable的mock()方法,此方法返回你想返回的格式
*在创建HttpMgr时,设置httpMgr.setEnableMock(true)
```java
classMockLoginApiimplementsConnectApi<Boolean>,HttpMockable<Boolean>{
publicBooleanmock(){
returntrue;//模拟返回true,表示登陆成功
}
publicHttpUriRequestgetHttpRequest(){
returnnull;
}
publicResponseParser<Boolean>getResponseParser(){
returnnull;
}
}
```
##图片下载与缓存
slovef-sdk自带了图片下载的Api:ImageLoadApi
默认此Api会自动将图片缓存到本地
当然也可以指定不缓存图片:newImageLoadApi("http://xxx.com/abc.jpg",false)
有了这个Api,使用httpMgr.execute(api)就可以得到Bitmap对象了
因为本地缓存需要指定一个目录,因此在启动时,需要执行FileCache.init(cache-folder)
除了图片缓存,其他http请求也可以进行缓存
只要将自己的Api实现HttpCacheable接口,即可。