继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

开发一个好项目:五、创建数据源,创建网络数据Service和网络数据源

慕码人3916992
关注TA
已关注
手记 112
粉丝 81
获赞 3602

前一篇文章: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()));
            }
        });
    }
}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP