前一篇文章:android开发(如何开发一个可以维护的好项目):四 、项目结构 框架地址 dileber android框架 希望大家能多多star一下
框架中集成了 retrofit2 网络请求库,使用注解来操作。
public interface SysService {
/**
* 登录
*/
public static final String LOGIN = "api/v1/login";
@POST(LOGIN)
Call<UserWrapper> login(@Query("userName") String userName, @Query("passWord") String passWord);
}
写好之后,开始写网络数据源了。
继承BaseRemoteDataSource ,里面已经包含了retrofit2 请求方法,这个retrofit2 库,我对他的低层进行处理,支持cookie,如何配置cookie如下
在你请求后的回调方法,加入setCookie(response);就可以了,如登录之后再调用这个方法,就能持久化你的登录状态。除此之外,如果出现403这种网络失败的编号,会主动调用 Sapplication的appForbidden 方法,让你刷新session,之前的文章有提过。文章在这。
如果要清除掉cookie的话,就用TCookie里的方法。
@Override
public void checkUser(@NonNull UserModel userModel, final BaseDataSource.BaseCallback<UserWrapper> callback) {
Call<UserWrapper> call = userService.login(userModel.getUsername(),userModel.getUserpass());
call.enqueue(new RetCallback<UserWrapper>() {
@Override
protected void onSuccess(Call<UserWrapper> call, Response<UserWrapper> response) {
UserWrapper userWrapper = response.body();
if(userWrapper!=null){
setCookie(response);
callback.onSuccess(response.body());
}else{
callback.onFailure(new DataSourceException("数据返回为空"));
}
}
@Override
protected void failure(Call<UserWrapper> call, Throwable throwable) {
callback.onFailure(new DataSourceException(throwable.getMessage()));
}
});
}
这个是hRetrofit,网络请求必不可少
hRetrofit = HRetrofit.getInstence(Config.HTTP_URL);
网络请求失败调用这个,new一个DataSourceException方法,这个方法是我写的数据源错误总方法。统一调用,好操作。
callback.onFailure(new DataSourceException(throwable.getMessage()));
public class SysRemoteDataSource extends BaseRemoteDataSource implements SysDataSource{
private static volatile SysRemoteDataSource instance;
HRetrofit hRetrofit;
SysService sysService;
private SysRemoteDataSource(){
hRetrofit = HRetrofit.getInstence(Config.HTTP_URL);
sysService = hRetrofit.retrofit.create(SysService.class);
}
public static SysRemoteDataSource getInstance(){
if (instance==null){
synchronized (SysRemoteDataSource.class){
if(instance==null){
instance = new SysRemoteDataSource();
}
}
}
return instance;
}
@Override
public void launch(final BaseDataSource.BaseCallback<LaunchWrapper> callback) {
Call<LaunchWrapper> call = sysService.launch();
call.enqueue(new RetCallback<LaunchWrapper>() {
@Override
protected void onSuccess(Call<LaunchWrapper> call, Response<LaunchWrapper> response) {
LaunchWrapper launchWrapper = response.body();
if(launchWrapper!=null){
callback.onSuccess(response.body());
}else{
callback.onFailure(new DataSourceException("数据返回为空"));
}
}
@Override
protected void failure(Call<LaunchWrapper> call, Throwable throwable) {
callback.onFailure(new DataSourceException(throwable.getMessage()));
}
});
}
}