您的位置:首页 > 理论基础 > 计算机网络

MVP+Retrofit+Okhttp+RxJava

2017-12-28 13:27 435 查看

App的build.gradle依赖包:

[java]viewplaincopyprint?compile‘com.squareup.retrofit2:retrofit:2.0.0-beta4’//Retrofit2所需要的包compile’com.squareup.retrofit2:converter-gson:2.0.0-beta4’//ConverterFactory的Gson依赖包compile’com.squareup.retrofit2:converter-scalars:2.0.0-beta4’//ConverterFactory的String依赖包compile’com.facebook.fresco:fresco:0.11.0’compile’io.reactivex.rxjava2:rxjava:2.0.1’compile’io.reactivex.rxjava2:rxandroid:2.0.1’compile’com.squareup.retrofit2:adapter-rxjava2:2.3.0’

接口地址类:

[java]viewplaincopyprint?publicclassAPI{//接口:APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’http://api.tianapi.com/nba/?key=APIKEY&num=10publicstaticfinalStringHOST=“http://api.tianapi.com/nba/”;//接口:http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepagepublicstaticfinalStringBASE_URL=“http://result.eolinker.com/”;publicstaticfinalStringTOKEN=“umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611”;}
[java]viewplaincopyprint?publicinterfaceServiceAPI{@GET(API.HOST)//Call<NewsBean>getNews(@Query(“key”)Stringn,@Query(“num”)inti);publicFlowable<NewsBean>getNews(@Query(“key”)Stringn,@Query(“num”)inti);//@GET(“{token}”)//publicFlowable<ShopResponse<HomeData>>homepage(@Path(“token”)Stringtoken,@Query(“uri”)Stringuri);}

对Retrofit的封装:

[java]viewplaincopyprint?publicclassRetrofitHelper{privatestaticOkHttpClientclient;privatestaticServiceAPIserviceAPI;static{getClient();}publicstaticOkHttpClientgetClient(){if(client==null){synchronized(OkHttpClient.class){if(client==null){client=newOkHttpClient();}}}returnclient;}publicstaticServiceAPIgetServiceAPI(){if(serviceAPI==null){synchronized(ServiceAPI.class){if(serviceAPI==null){serviceAPI=onCreate(ServiceAPI.class,API.HOST);}}}returnserviceAPI;}publicstatic<T>TonCreate(Class<T>tclass,Stringurl){Retrofitbuild=newRetrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).client(client).build();returnbuild.create(tclass);}}

封装Bean类省略

MVP

Model层:

[java]viewplaincopyprint?publicinterfaceCGSB<T>{voidchengGong(Tt);voidshiBai(Call<T>call);}

[java]viewplaincopyprint?publicinterfaceNewsModelJK{voidgetNews(Stringurl,inti,CGSB<NewsBean>cgsb);}
[java]viewplaincopyprint?publicclassNewsModelimplementsNewsModelJK{publicvoidgetNews(Stringurl,inti,finalCGSB<NewsBean>cgsb){Flowable<NewsBean>obserable=RetrofitHelper.getServiceAPI().getNews(url,i);//被观察者obserable.subscribeOn(Schedulers.io())//被观察者Scheduler(调度器).observeOn(AndroidSchedulers.mainThread())//观察者切换到主线程.subscribe(newConsumer<NewsBean>(){@Overridepublicvoidaccept(NewsBeannewsBean)throwsException{//调用成功的方法cgsb.chengGong(newsBean);}});}}
P层:

[java]viewplaincopyprint?publicinterfaceINews{voidshowBean(NewsBeannewsBean);}
[java]viewplaincopyprint?publicclassNewsPersenter{privatefinalNewsModelnewsModel;privateINewsiNews;publicNewsPersenter(INewsiNews){newsModel=newNewsModel();this.iNews=iNews;}publicvoidgetNews(finalStringn,inti){newsModel.getNews(n,i,newCGSB<NewsBean>(){@OverridepublicvoidchengGong(NewsBeannewsBean){iNews.showBean(newsBean);}@OverridepublicvoidshiBai(Call<NewsBean>call){}});}}
[java]viewplaincopyprint?publicclassMainActivityextendsAppCompatActivityimplementsINews{privateXRecyclerViewmXrlv;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();NewsPersenternewsPersenter=newNewsPersenter(this);newsPersenter.getNews(”71e58b5b2f930eaf1f937407acde08fe”,10);/***沉浸式*/initState();}@OverridepublicvoidshowBean(NewsBeannewsBean){//Log.i(“Tag”,newsBean.getMsg());List<NewsBean.NewslistBean>newslist=newsBean.getNewslist();mXrlv.setLayoutManager(newLinearLayoutManager(this));MyAdaptermyAdapter=newMyAdapter(newslist,this);mXrlv.setAdapter(myAdapter);}privatevoidinitView(){mXrlv=(XRecyclerView)findViewById(R.id.xrlv);}/***沉浸式状态栏*/privatevoidinitState(){if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mvp java