亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

開發一個好項目:五、創建數據源,創建網絡數據Service和網絡數據源

標簽:
Android

前一篇文章: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()));
            }
        });
    }
}
點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消