RxJava + Retrofit + MVP(看完还不明白,吐槽我。适合初学者,VIP版MVP框架!!),2024Android大厂面试知识分享

public void getGetData(String params);
}
}

比如你要看一个页面有什么更新UI的操作或者有什么网络请求,只要看契约类就对这个页面很了解了如:

1、view就是相当于MVP的V层,一般被activity或者Fragment实现,可以看到view里有2个方法:

  • showGetData 获取get请求数据,更新UI
  • showGetError get请求失败了,更新失败UI
  • BaseView 放的都是通用的方法,这里放了2个:showLoading,hideLoading(当然有些网络请求不需要转loading,那么不调用就好了)

2、Prensenter就是MVP的P层需要使用到的方法,要搞清楚,其实还有一个实体类GetPresenter。实体类实现GetContract.Prensenter。可以看到里面就一个getGetData。的网络请求。为什么这么写,第一契约类可以减少类的数目,第二更重要的一点是你可以很快的清楚你开发模块的功能和操作

还有一点要注意,因为使用RxJava结合Retrofit,我把通用的方法全部封装了BasePresenter里。因为RxJava的链式编程,所以我直接省略掉了model层,当然你可以写一个接口,然后写个model层把数据回调给Presenter。这里要注意MVP,MVP只是开发框架,是我们借鉴的开发思路。可能100个人有100个不同的MVP框架,这里我是说说我的想法,大家可以借鉴和学习。

5、RxJava结合Retrofit的MVP

5.1、封装Retrofit,其实和OkHttp没有区别

public class RetrofitManager {
//省略部分代码,便于理解
private static RetrofitManager retrofitManager;
private OkHttpClient okHttpClient;
private Retrofit retrofit;
//这是我retrofit的网络请求配置
private RetrofitApiService retrofitApiService;

private RetrofitManager() {
//初始化Okhttp
initOkHttpClient();
//初始化retrofit
initRetrofit();
}

public static RetrofitManager getRetrofitManager() {
if (retrofitManager == null) {
synchronized (RetrofitManager.class) {
if (retrofitManager == null) {
retrofitManager = new RetrofitManager();
}
}
}
return retrofitManager;
}

private void initRetrofit() {
retrofit = new Retrofit.Builder()
.baseUrl(SystemConst.DEFAULT_SERVER)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
retrofitApiService = retrofit.create(RetrofitApiService.class);
}

public static RetrofitApiService getApiService() {
return retrofitManager.retrofitApiService;
}

private void initOkHttpClient() {
okHttpClient = new OkHttpClient.Builder()
//设置缓存文件路径,和文件大小
.cache(new Cache(new File(Environment.getExternalStorageDirectory() + “/okhttp_cache/”), 50 * 1024 * 1024))
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(new HttpLogInterceptor())
//设置在线和离线缓存
.addInterceptor(OfflineCacheInterceptor.getInstance())
.addNetworkInterceptor(NetCacheInterceptor.getInstance())
.build();
}
}

5.2、比如我们来写GetFragment这块。首先写契约类

回想之前我们有个BaseView。里面有2个方法showLoading和hideLoading (只要记住大家通用的方法封装成base,有些页面不同就不调用就行了) 代码如下:

public interface BaseView {

//显示正在加载loading
void showLoading(String message);

// 关闭正在加载loading

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值