一套可以直接复制使用的MVP框架
通过对MVP设计模式学习,对MVP也有了一个初步的认识,以登录Login模块为例,封装MVP如下:
package com.example.administrator.frameapp.api; /** * 存放url的接口 * Created by Zyh on 2016/11/17. */ public interface ApiUrl { String IP="http://192.168.8.4/tp3/"; String BASEURL=IP+"api.php/Home/"; }
package com.example.administrator.frameapp.api; import io.reactivex.Flowable; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; /** * Created by Zyh on 2016/11/17. */ public interface ApiService { @FormUrlEncoded @POST("login/login") Flowable<ApiResult> login(@Field("name") String name, @Field("password") String password); }
package com.example.administrator.frameapp.api; /** * Created by Zyh on 2016/11/17. */ public class ApiResult<T> { private int code; private String Msg; private T data; public int getCode() { return code; } @Override public String toString() { return "ApiResult{" + "code=" + code + ", Msg='" + Msg + '\'' + ", data=" + data + '}'; } public void setCode(int code) { this.code = code; } public String getMsg() { return Msg; } public void setMsg(String msg) { Msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
package com.example.administrator.frameapp.api; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Zyh on 2016/11/17. */ public class Api { private Retrofit mRetrofit; public ApiService mApiservice; private Api() { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);//请求的内容和响应的内容都存在这个系统的BODY中 OkHttpClient mOkHttpClient = new OkHttpClient.Builder().addInterceptor(interceptor).build(); mRetrofit = new Retrofit.Builder() .client(mOkHttpClient) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl(ApiUrl.BASEURL) .build(); mApiservice = mRetrofit.create(ApiService.class); } //静态内部类的单例模式:内部类决定了什么时候加载他就什么时候进行加载, private static class SingleHolder { private static final Api INSTANCE = new Api(); } public static Api getInstance() { return SingleHolder.INSTANCE; } }
package com.example.administrator.frameapp.ui.base; /** * 创建base类是为了统一管理 * BasePresent是抽象类 * 将model和view关联起来 * Created by Zyh on 2016/11/17. */ public abstract class BasePresent<M,V> { public M mModel; public V mView; public void setVM(V v,M m){ //这个方法将LoginPresenter中方法中类型映射成具体的类型 this.mModel=m; this.mView=v; } }
package com.example.administrator.frameapp.ui.base; /** * Created by Zyh on 2016/11/17. */ public interface BaseView { }
package com.example.administrator.frameapp.ui.base; /** * Created by Zyh on 2016/11/17. */ public interface BaseModel { }