浅谈retrofit2.1+okhttp3 搭建MVP框架
2017-02-17 19:02
295 查看
这是第一篇博客,如有写的不对的地方请指出,本人会虚心学习,共同进步,谢谢!
正文:
整个框架如下图所示:
这是我自己理解的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:里面存放一些公共的参数;
14、MyAapplication:里面存放一些全局变量、Fresco初始化;
以上是我个人针对MVP里面,搭建出来的框架,如有不妥的地方,还请指出,谢谢!
二、简单加载图片的具体实现
1、MainAtivity
1)、 MainActivity继承基类和BannerViewInter接口,并实现具体方法;
2)、实例化BannerPresenterInterImpl实现类,传入相关参数,调用图片请求显示方法;
3)、通过BannerViewInter接口的showBannerImg方法,接受返回图片地址url,调用图片显示方法,显示图片。
2、BannerViewInter
1)、继承基类接口,自定义具体业务方法;
1)、继承BannerPresenterInter接口,实现具体方法;
2)、实例化BannerController控制类;
3)、调用图片请求方法;
4)、通过onBannerResponse方法 接收网络返回的数据;
5)、并调用BannerViewInter接口显示图片方法,回调给主线程,显示图片。
注:这里就可以实现具
a011
体的业务逻辑,通过接口,回调给主线程。
4、BannerController
1)、初始化api服务接口、BannerPresenterInter接口等;
2)、调用服务接口显示图片的api,然后异步方法获取图片资源。
对Okhttp进行封装,添加打印日志等方法,方便查看返回结果及后台报错原因。
6、RetrofitHttp
添加请求返回可以接受的参数及api服务接口。
里面存放统一api请求地址。
里面存放请求回来,接受参数。
正文:
整个框架如下图所示:
这是我自己理解的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";
14、MyAapplication:里面存放一些全局变量、Fresco初始化;
@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、BannerPresenterInterImpl
1)、继承BannerPresenterInter接口,实现具体方法;
2)、实例化BannerController控制类;
3)、调用图片请求方法;
4)、通过onBannerResponse方法 接收网络返回的数据;
5)、并调用BannerViewInter接口显示图片方法,回调给主线程,显示图片。
注:这里就可以实现具
a011
体的业务逻辑,通过接口,回调给主线程。
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; } }
相关文章推荐
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- 使用Retrofit+RxJava搭建简单的MVP网络请求框架
- 单列模式,RecyclerView适配器封装,BroadcastReceiver介绍,Mvp+Retrofit+rxjava+okhttp框架的梳理总结
- Retrofit2+OkHttp3+RxJava搭建网络框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- Android 搭建MVP+Retrofit+RxJava网络请求框架
- Android项目MVP模式框架+okhttp+rxjava+retrofit网络框架
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比 标签: androidVolleyOkhttpRetrofit网络请求框架
- [置顶] Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- (三)安卓框架搭建之MVP+Retrofit+RxJava基础
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架