Simple的MVP封装

基于OKHTTP,OKHTTP-utils洪洋的库,https认证,带有token
学习MVP架构还是建议,去学习:dagger2(类似于spring框架)
,butterknife ,Rxjava ,逻辑看起来更加简洁,解耦,学习简单的MVP之后建议去学习这三个库,才能感受到他们的魅力

public abstract class BaseInteractor {
protected Gson mGson;
protected OkHttpUtils okHttpUtils;
protected final AppApplication app;
protected final String token;

public BaseInteractor(){
    mGson = new Gson();
    app = AppApplication.getAppInstance();
    token = app.getToken();
    okHttpUtils =app.getInitOkHttpUtils();
}

public void cancelTag(int tag){
    okHttpUtils.cancelTag(tag);
}

public static  class  Build{
    public String mToken;
    public Build token(String mToken){
        this.mToken  = mToken;
        return this;
    }

    public BaseInteractor build() {
        return new BaseInteractor() {};
    }
}

}

登陆的例子:

public class LoginInteractorImpl extends BaseInteractor implements LoginInteractor {

String jsonBean ;
private ReLoginBean bean;
private RequestCall call;

@Override
public void login(final Object tClazz, final Class<T> tBean, final onLoginRepListener rep, final OnLoginFinishedListener listener) {
     jsonBean = mGson.toJson(tClazz);
    call = okHttpUtils.postString()
            .url(URLValue.LoginUrl)
            //          .addHeader("Token" ,token)   登陆获取token
            .content(jsonBean)
            .mediaType(MediaType.parse("application/json; charset=utf-8"))
            .build();
    call.execute(new Callback<ReLoginBean>() {
         @Override
         public boolean validateReponse(Response response, int id) {
                    int code = response.code();
                    CodeHolder holder = new CodeHolder(code);
                   if (response.code() != 200){
                       listener.onFailure(holder.getMessage());
                   }
                       return super.validateReponse(response, id);
                }
        @Override
        public ReLoginBean parseNetworkResponse(Response response, int id) throws Exception {
            String reLoginBean = response.body().string();
            ReLoginBean bean = (ReLoginBean) GsonUtil.changeGsonToBean(reLoginBean, tBean);
            return bean;
        }

        @Override
        public void onError(Call call, Exception e, int id) {}

        @Override
        public void onResponse(ReLoginBean response, int id) {
                app.setToken(response.getToken());
                listener.onSuccessEntity(response);
        }
    });
}
public void cancel(){
    call.cancel();
}

}
//具体的处理登陆的业务层

public interface LoginInteractor {

 interface onLoginRepListener{
     void onNotNet(String msg);
     void onPreStart();
     void onPreHttp();
     void onUsernameError();
     void onPasswordError();
 }

登陆模块的接口
interface OnLoginFinishedListener {

    void onRequestPWError();

    void onSuccess(String tData);

    void onSuccessEntity(ReLoginBean t);

    void onFailure(String error);

    void onFinsh();
}


//需要给两个对象 如果服务器接收的是json,not params ,request Bean , response bean
void login(Object object ,Class<T> tClass , onLoginRepListener rep , OnLoginFinishedListener listener);

}

//回调给UI界面的(activity)
public class LoginPresenterImpl implements ILoginPresenter, LoginInteractor.OnLoginFinishedListener, LoginInteractor.onLoginRepListener {

private ILoginView view;

private LoginInteractor interactor ;

public LoginPresenterImpl(ILoginView view) {
    this.view = view;
    interactor = new LoginInteractorImpl<T>();

}

@Override
public void onLogin(String uName, String pwd ) {
    //之后对这些 数据加密
   // interactor.login(uName , pwd , this , this);
}

@Override
public void onUsernameError() {
    view.onToast("用户名输入错误");
}

@Override
public void onPasswordError() {
    view.onToast("密码最低为6位数");
}

@Override
public void onNotNet(String msg) {
    view.onToast("当前网络断开");
}



//网络处理的结果数据 密码错误的回调
@Override
public void onRequestPWError() {
    view.onToast("用户名或密码不正确");
}

//网络处理的结果数据
@Override
public void onSuccess(String tData) {


}

@Override
public void onSuccessEntity(ReLoginBean t) {

}

//

@Override
public void onFailure(String error) {
    view.onToast("登陆失败" +error);
}


@Override
public void onFinsh() {
    view.hideDialog();
}



@Override
public void onPreStart() {
    view.showDialog();
}

@Override
public void onPreHttp() {

}

}

在application初始化 okhttpUtils ,
sslParams = HttpsUtils.getSslSocketFactory(inputStreams, null, null);
initCache();
okHttpClient = new OkHttpClient.Builder()
// .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.addInterceptor(cacheInterceptor)
.addNetworkInterceptor(cacheInterceptor)
.retryOnConnectionFailure(true)
.cache(cache)
.build();
this.okHttpUtils = OkHttpUtils.initClient(okHttpClient);

//cache
private void initCache() {
if (cacheFile == null){
cacheFile = new File(Constants.getCacheDir());
}
if (cache == null){
cache = new Cache(cacheFile, 1024 * 1024 * 50);
}
if (cacheInterceptor == null)
cacheInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!NetworkUtils.isNetworkConnected()) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request);
if (NetworkUtils.isNetworkConnected()) {
int maxAge = 0;
// 有网络时, 不缓存, 最大保存时长为0
response.newBuilder()
.header(“Cache-Control”, “public, max-age=” + maxAge)
.removeHeader(“Pragma”)
.build();
} else {
// 无网络时,设置超时为14天
int maxStale = 60 * 60 * 24 * 14;
response.newBuilder()
.header(“Cache-Control”, “public, only-if-cached, max-stale=” + maxStale)
.removeHeader(“Pragma”)
.build();
}
return response;
}
};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值