浅谈retrofit2.1+okhttp3 搭建MVP框架
来源:互联网 发布:linux简单管道 编辑:程序博客网 时间:2024/06/05 06:42
这是第一篇博客,如有写的不对的地方请指出,本人会虚心学习,共同进步,谢谢!
正文:
整个框架如下图所示:
这是我自己理解的MVP架构,针对各个文件简单的解释一下。
一、各个文件解释
1、adapters:里面存放各个View的适配器;
2、base:里面存放一些基类;
3、controllers:里面存放各个业务网络请求控制类;
注:因为请求后台数据时,后台统一由Controller层来接受参数、然后进行业务逻辑的实现。所以本人就以此来存放各个业务网络请求类。
4、daos:里面存放操作数据库一下方法类和共用方法类;
5、db:里面放数据库初始化类;
6、entitys:里面存放一些bean类、消息通知类、网络请求类、数据回调类、retrofit异步回调接受类;
7、http:里面存放网络请求类;
8、interfaces:里面存放一些适配器回调接口类、view层回调接口类、presenters层回调接口类、retrofit统一api地址服务接口;
9、mineview:里面存放一些自定义view、布局等类;
10、presenterimpls:里面存放各个业务presenter具体实现类;
11、service:里面存放一些业务涉及到的服务类;
12、utils:里面存放一些公用的方法;
13、Constants:里面存放一些公共的参数;
public final static String ImageUrlIp = "x'x'x'x'x";
@Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }
以上是我个人针对MVP里面,搭建出来的框架,如有不妥的地方,还请指出,谢谢!
二、简单加载图片的具体实现
1、MainAtivity
1)、 MainActivity继承基类和BannerViewInter接口,并实现具体方法;
2)、实例化BannerPresenterInterImpl实现类,传入相关参数,调用图片请求显示方法;
3)、通过BannerViewInter接口的showBannerImg方法,接受返回图片地址url,调用图片显示方法,显示图片。
public class MainActivity extends BaseActivity implements BannerViewInter{ @InjectView(R.id.am_sdv) public SimpleDraweeView bannerImg; private BannerPresenterInterImpl bannerPresenterInterimpl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); super.init(); } @Override public void initView() { bannerPresenterInterimpl = new BannerPresenterInterImpl(this,this); bannerPresenterInterimpl.getBannerImg(); } @Override public void initEvent() { } @Override public void initData() { } @Override public void showBannerImg(String url) { bannerImg.setImageURI(CommonUtils.setImgUri(url)); } @Override public void onResponseFail(String fail) { Toast.makeText(this,fail,Toast.LENGTH_LONG).show(); } @Override public void onFailure(String failure) { Toast.makeText(this,failure,Toast.LENGTH_LONG).show(); }
2、BannerViewInter
1)、继承基类接口,自定义具体业务方法;
public interface BannerViewInter extends BaseViewInter{ void showBannerImg(String url);}
2)、基类接口。public interface BaseViewInter { void onResponseFail(String fail); void onFailure(String failure);}
3、BannerPresenterInterImpl1)、继承BannerPresenterInter接口,实现具体方法;
2)、实例化BannerController控制类;
3)、调用图片请求方法;
4)、通过onBannerResponse方法 接收网络返回的数据;
5)、并调用BannerViewInter接口显示图片方法,回调给主线程,显示图片。
注:这里就可以实现具体的业务逻辑,通过接口,回调给主线程。
public class BannerPresenterInterImpl implements BannerPresenterInter { private Context context; private BannerViewInter bannerViewInter; private BannerController bannerController; public BannerPresenterInterImpl(Context context,BannerViewInter bannerViewInter){ this.context = context; this.bannerViewInter = bannerViewInter; } public void getBannerImg(){ bannerController = new BannerController(context,this); bannerController.getBanner(); } @Override public void onBannerResponse(List<BannerResponse> responseList) { bannerViewInter.showBannerImg(responseList.get(0).getBannerUrl()); } @Override public void onResponseFail(String fail) { bannerViewInter.onResponseFail(fail); } @Override public void onFailure(String failure) { bannerViewInter.onFailure(failure); }}
4、BannerController
1)、初始化api服务接口、BannerPresenterInter接口等;
2)、调用服务接口显示图片的api,然后异步方法获取图片资源。
public class BannerController { private Context context; private BannerPresenterInter bannerPresenterInter; private ApiServiceInterface apiServiceInterface; public BannerController(Context context,BannerPresenterInter bannerPresenterInter){ this.context = context; this.bannerPresenterInter = bannerPresenterInter; apiServiceInterface = RetrofitHttp.getApi(); } public void getBanner(){ Call<BannerObject> call = apiServiceInterface.homeBannerApi(); call.enqueue(new Callback<BannerObject>() { @Override public void onResponse(Call<BannerObject> call, Response<BannerObject> response) { BannerObject object = response.body(); if(object.getCode() == BaseController.CODE){ bannerPresenterInter.onBannerResponse(object.getResult()); }else{ bannerPresenterInter.onResponseFail(object.getMessage()); } } @Override public void onFailure(Call<BannerObject> call, Throwable t) { bannerPresenterInter.onFailure(t.toString()); } }); }}
5、Okhttp对Okhttp进行封装,添加打印日志等方法,方便查看返回结果及后台报错原因。
public class OkhttpHttp { public static OkHttpClient getOkHttpClient(){ HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { Log.i("message",message); } }); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.i("request",request.toString()); Response proceed = chain.proceed(request); Log.i("procceed",proceed.toString()); return proceed; } }) .addInterceptor(httpLoggingInterceptor) .connectTimeout(5000, TimeUnit.SECONDS) .build(); return client; }}
6、RetrofitHttp
添加请求返回可以接受的参数及api服务接口。
public class RetrofitHttp { public final static String IP = "xxxx"; public final static String Http = "http://"+IP+"/mobile-web/mobile/"; public static ApiServiceInterface apiServiceInterface; public static Retrofit retrofit; private RetrofitHttp(){} public static ApiServiceInterface getApi(){ if(retrofit == null){ retrofit = new Retrofit.Builder() .baseUrl(Http) .addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(ScalarsConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(OkhttpHttp.getOkHttpClient()) .build(); } apiServiceInterface = retrofit.create(ApiServiceInterface.class); return apiServiceInterface; }}
7、ApiServiceInterface里面存放统一api请求地址。
public interface ApiServiceInterface { String HOME = "home/"; //主页 @GET(HOME+"getTopBannerList") Call<BannerObject> homeBannerApi(); //banner}
8、BannerObject里面存放请求回来,接受参数。
public class BannerObject extends BaseResponseObject{ private List<BannerResponse> result; public List<BannerResponse> getResult() { return result; } public void setResult(List<BannerResponse> result) { this.result = result; }}
- 浅谈retrofit2.1+okhttp3 搭建MVP框架
- Retrofit2+OkHttp3+RxJava搭建网络框架
- Retrofit2+OkHttp3+RxJava搭建网络框架
- RxJava2 + Retrofit2 + Mvp + Dagger2框架搭建
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- mvp+retrofit2+rxjava+dagger框架的简单搭建
- Retrofit2+OkHttp3+RxJava构建网络框架
- mvp+rxjava2+retrofit2项目框架
- Mvp+rxjava2+Retrofit2 结构框架
- (9)RxJava2+Retrofit2+OkHttp3系列(OkHttp3-1)
- 简易Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- (8)RxJava2+Retrofit2+OkHttp3系列(Retrofit2-1)
- 最近很火的MVP+Retrofit2+rxjava+Dagger2框架 -- MVP
- okhttp3 retrofit2 缓存问题
- Rxjava+Retrofit2+Okhttp3
- Retrofit2+okhttp3 使用教程
- 初探Okhttp3+Retrofit2+RXJava
- java第十八天
- linux 内核同步
- java第十五天-总结1
- LightOJ 1061N Queen Again(搜索+状压DP)
- Crackme 4
- 浅谈retrofit2.1+okhttp3 搭建MVP框架
- java第十六天-异常体系
- 排序面试指南
- Android热修复技术选型——三大流派解析
- 防止刷票的一些方法介绍
- java.util.MissingFormatArgumentException: Format specifier 'd'
- 前端工程师不得不知道的ES6新特性(四)
- 即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)
- 初学者上传项目至github