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接口,即可。

相关推荐