Skip to content

Latest commit

 

History

History
118 lines (90 loc) · 3.41 KB

README.md

File metadata and controls

118 lines (90 loc) · 3.41 KB

slovef-sdk

Android客户端与后台服务通过http协议进行交互时,使用slovef-sdk可以使得编程更加简单

客户端与服务端,一个http请求,我们就认为是一个API

  • 发起http请求
  • 实现http登陆失效后的自动登陆
  • 实现http请求的模拟返回
  • 图片下载与缓存

##如何发起一个API请求 创建一个自定义Api类,继承ConnectApi

    /**
   * 此API用于查询当前是否已经登陆
	 * 预期返回的结果是json格式
	 * 成功: {login:true}
	 * 失败: {login:false}
	 */
	public class IsLoginApi implements ConnectApi<Boolean>{
		public HttpUriRequest getHttpRequest() {
			//Http请求基于HttpClient,因此需要拼装一个HttpUriRequest
			HttpUriRequest req=new HttpGet("http://xxx.com/islogin.do");
			return req;
		}
		public ResponseParser<Boolean> getResponseParser() {
			return new JsonParser<Boolean>() {
				public Boolean parse(JSONObject json) throws Exception {
					return json.optBoolean("login");
				}
			};
		}
	}

发起Http请求,并获取结果

    	HttpMgr httpMgr=new HttpMgr();
		IsLoginApi api=new IsLoginApi();
		Boolean isLogin=httpMgr.execute(api);
		System.out.println(isLogin);

##实现http登陆失效后的自动登陆 使用http协议与服务端交互,一般都需要登陆。

登陆信息在经过一段时间后,可能会过期失效,如果此时再发起需要登陆验证的请求,就会失败了

我们需要实现,当session失效时,自动进行一次登陆行为,登陆成功后再对之前的请求进行重试

这里我们通过自己实现一个HttpMgr里面的FailStrategy来完成自己的一个请求失败处理策略

    class MyAutoLoginStrategy extends AutoLoginStrategy{
		public boolean isLogin(HttpResponse resp) {
			//根据相应结果判定,是否已登陆
			return false;
		}

		@Override
		public boolean doLogin(HttpMgr httpMgr) {
			try {
				return httpMgr.executeOnce(new LoginApi("zhangsan", "12345"));
			} catch (Exception e) {
				e.printStackTrace();
			}
			return false;
		}
		
	}

以上代码继承了AutoLoginStrategy,AutoLoginStrategy中已经实现了自动重试等功能,具体参见源码

在此处,只需要写清楚如何发起登陆请求即可

##实现http请求的模拟返回 客户端和后台一般都是同时进行开发的

当服务器端还没有提供好Api接口,而客户端需要使用时,就需要对服务器端的Api进行模拟

slovef-sdk提供非常方便的http请求模拟框架

  • 创建一个需要模拟返回的Api,将此Api类实现HttpMockable接口
  • 实现HttpMockable的mock()方法,此方法返回你想返回的格式
  • 在创建HttpMgr时,设置httpMgr.setEnableMock(true)
    class MockLoginApi implements ConnectApi<Boolean>,HttpMockable<Boolean>{
		public Boolean mock() {
			return true;//模拟返回true,表示登陆成功
		}
		public HttpUriRequest getHttpRequest() {
			return null;
		}
		public ResponseParser<Boolean> getResponseParser() {
			return null;
		}
	}

##图片下载与缓存

slovef-sdk自带了图片下载的Api:ImageLoadApi

默认此Api会自动将图片缓存到本地

当然也可以指定不缓存图片:new ImageLoadApi("http://xxx.com/abc.jpg",false)

有了这个Api,使用httpMgr.execute(api)就可以得到Bitmap对象了

除了图片缓存,其他http请求也可以进行缓存

只要将自己的Api实现HttpCacheable接口,即可。