ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:18.42KB ,
资源ID:23812918      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23812918.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(RxJavaRetrofitMVP.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

RxJavaRetrofitMVP.docx

1、RxJavaRetrofitMVPMVP:Model:控制层View:视图层,一般由activity或者fragment继承Presenter:中间调节层,一般在activity或者fragment中创建presenter对象,在presenter中对model和view进行操作。Bean:实体类Bean:Public class User SerializedName(user_name) Private string name;SerializedName(user_age) Private string ageGet,set方法设置View :视图类一般是接口,只有方法没有实现,主要就是

2、对activity或者fragment中的内容,比如ShowProgress;HideProgress;UpdateList;然后让fragment或者activity实现此接口Model:实现类创建ShadowModel接口,里面包含需要实现的方法,getSegmentList();创建ShadowModelImpl类,实现ShadowMod接口,实现接口的方法。因为此次介绍是使用的retrofit+rxjava的实现网络访问,所以我们另外创建两个类别:ApiManger类:public static File httpCacheDirectory = new File(MyApplicat

3、ion.getContext().getCacheDir(), shadow); private static int cacheSize = 10 * 1024 * 1024; / 10 MiB 缓存大小 private static Cache cache = new Cache(httpCacheDirectory, cacheSize); 创建缓存对象Interceptor是拦截器, 在发送之前, 添加一些公共参数, 或者获取一些信息。 private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new In

4、terceptor() Override 创建拦截器 public Response intercept(Chain chain) throws IOException Request request = chain.request(); if (!NetWorkUtil.isNetWorkAvailable(MyApplication.getContext() request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); Response originalResponse = chain.pr

5、oceed(request); if (NetWorkUtil.isNetWorkAvailable(MyApplication.getContext() int maxAge = 60; / 在线缓存在1分钟内可读取 return originalResponse.newBuilder() .removeHeader(Pragma) .removeHeader(Cache-Control) .header(Cache-Control, public, max-age= + maxAge) .build(); else int maxStale = 60 * 60 * 24 * 28; / 离

6、线时缓存保存4周 return originalResponse.newBuilder() .removeHeader(Pragma) .removeHeader(Cache-Control) .header(Cache-Control, public, only-if-cached, max-stale= + maxStale) .build(); ; public static OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)

7、.addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) .cache(cache) .build(); public static ApiManage apiManage; public static ApiManage getInstence() if (apiManage = null) synchronized (ApiManage.class) if (apiManage = null) apiManage = new ApiManage(); return apiManage; ShadowApi接口:public interface S

8、hadowApi GET(/api/4/news/latest) Observable getLastDaily(); GET(/api/4/news/id) Observable getZhihuStory(Path(id) String id); Retrofit 有很多注解,GET POST DELETE 等等主要是说请求方式1.GET(/api/4/news/latest) = http:/news- /api/4/news/latestObservable getLastDaily(); 2.GET(/api/4/news/before/date) http:/news- /api/

9、4/news/before?date = date Observable getTheDaily(Path(date) String date); 3. GET(/api/4/news/id) http:/news- /api/4/news?id = idObservable getZhihuStory(Path(id) String id);4.GET(/weather) 多个参数请求 Observable getWeather(Query(q) String place, Query(units) String units);5.GET(applist/apps/detail) 参数不固定

10、的时候Call getDetail(QueryMap Map param);6.GET(applist/apps/detail?type=detail) 静态参数,动态参数混合使用Call getDetail(Query(appid) String appid);7.Headers(Accept-Encoding: application/json) 固定添加header,但是一般都是写个拦截器,在httpclient中进行设置GET(applist/apps/detail?type=detail)Call getDetail(Query(appid) String appid);8.Head

11、ers( 多个header的时候 X-Foo: Bar, X-Ping: Pong )POST请求不能把数据放在URL中,需要放在请求体中,所以我们可以这样做:1POST(/login/)Observablelogin(post(Body User user);User是个对象,所以我们在传递参数的时候需要传递一个对象过来。2通过Field来指定key,后面跟上valueFormUrlEncodedPOST(/newfind/index_ask) Observable getDaJia(Field(page) int page, Field(pageSize) int size, Field(

12、tokenMark) long tokenMark, Field(token) String token);3请求体过多,采用map传递参数,直接传过来封装好的map即可FormUrlEncodedPOST(FundPaperTrade/AppUserLogin)Observable getTransData(FieldMap Map map);以上三种请求都是以键值对形式去请求,但是一般项目中post请求除了键值对,也还会遇到json、xml的请求,后台也做了约束,约束其上传格式为json/xml,无默认(防止不认识上传的东东),所以一般要添加头文件(测试必须得用fiddle,可减少一大半时

13、间,悔)下面谈谈如何添加头文件,第一种方式直接在api中请求方式之上添加,如下: 1.Headers(Content-type:application/json, Content-Length:59)*/POST(FundPaperTrade/AppUserLogin)Observable getTransData(Body TestBean str);2.为了方便使用可以写个拦截器,为每个请求都添加header,下面的APImanager进行的详细的设置public class HttpInterceptor implements Interceptor Override public Re

14、sponse intercept(Chain chain) throws IOException Request.Builder builder = chain.request().newBuilder(); Request requst = builder.addHeader(Content-type, application/json).build(); return chain.proceed(requst); 最后配置网络处加入client.interceptors().add(new HttpInterceptor();一定要注意用json上传,Body中千万不能写String类型,

15、否则会导致请求体构造错误(json格式不正确,多出),正确写法如下: POST(FundPaperTrade/AppUserLogin) Observable getTransData(Body TestBean str);/实体对象ShadowModelImpl:Private Object object = new Object();Private ShadowApi shadowApi;public ShadowApi getShadowApiService() if (shadowApi = null) synchronized (object) if (shadowApi = nul

16、l) shadowApi = new Retrofit.Builder() .baseUrl(http:/news-) .addCallAdapterFactory(RxJavaCallAdapterFactory.create() .client(ApiManage.client) .addConverterFactory(GsonConverterFactory.create() .build() .create(shadowApi.class); return shadowApi; Presenter:实现model和view之间的联系,model负责获取数据,view负责处理数据。Rx

17、Java网络访问,调度容易引起内存泄漏,所以一般写个BasePresenter接口,用于处理所以的subscription;Public interface BasePresenterVoid unsubscribe();BasePresenterImpl实现BasePresenter接口Public class BasePresenterImplement implements BasePresenter /获取所有的观察者集合 Private CompositeSubscription compositeSubscription ; Public void addSubcription(S

18、ubcription s) if (this.mCompositeSubscription = null) this.mCompositeSubscription = new CompositeSubscription(); this.mCompositeSubscription.add(s);/实现接口的方法,一般在ondestroy中调用,销毁Public void unsubscribe() mCompoditeSubscription.unsubscribe();基类配置完成,下面就需要配置需要的presenter创建接口ShadowPresenter,要实现的方法是加载网络列表数据g

19、etSegmentList();创建类ShadowPresenterImpl 实现ShadowPresenter 继承BasePresenterImpl在构造方法中对view和model进行初始化操作。Private ShadowView shadowView;Private ShadowModel shadowModel;Public ShadowPresenterImpl(ShadowView view) shadowView = view;/因为activity继承shadowview,所以直接传过来即可 shadowModel = new shadowModelmpl();然后实现Sh

20、adowPresenter接口的方法,getSegmentList(); Override public void getSegmentList () shadowView.showProgressDialog(); Subscription subscription =shadowMode. getShadowApiService ().getShadowApi() .map(new Func1() Override public Object call(Object object) return object; ) .subscribeOn(Schedulers.io() 线程调度 .ob

21、serveOn(AndroidSchedulers.mainThread() 切换主线程/两种方式来处理返回的数据1-.subscribe(new Action1() Override public void call(Shadow shadow) ); 2-.subscribe(new Observer() Override public void onCompleted() Override public void onError(Throwable e) mZhihuFragment.hidProgressDialog(); mZhihuFragment.showError(e.getM

22、essage(); Override public void onNext(Object object) shadowView.hidProgressDialog(); ); addSubscription(subscription); 添加观察者集合,以便于统一销毁在ShadowPresenterImpl中获取相应的数据,在主线程中就可以对UI主界面进行操作,OK,结束。引用如下:compile com.squareup.retrofit:retrofit:2.0.0-beta2 compile com.squareup.retrofit:converter-gson:2.0.0-beta2

23、 compile com.android.support:recyclerview-v7:24.1.1 compile com.squareup.retrofit2:adapter-rxjava:+ compile com.google.code.gson:gson:+ compile io.reactivex:rxjava:+ compile com.squareup.retrofit:adapter-rxjava:+ compile com.trello:rxlifecycle:+ compile com.trello:rxlifecycle-components:+ compile com.android.support:design:24.1.1 compile com.android.support:support-v4:24.1.1 compile com.android.support:recyclerview-v7:24.1.1 compile com.google.code.gson:gson:2.2.4 compile com.jakewharton:butterknife:5.1.1 compile com.android.support:cardview-v7:24.1.1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1