MVP+Retrofit+Okhttp+RxJava
2017-12-05 14:47
323 查看
App的build.gradle依赖包:
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'
接口地址类:
public class API {//接口:APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’ http://api.tianapi.com/nba/?key=APIKEY&num=10 public static final String HOST="http://api.tianapi.com/nba/";
//接口:http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage
public static final String BASE_URL= "http://result.eolinker.com/";
public static final String TOKEN= "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";
}
public interface ServiceAPI {
@GET(API.HOST)
// Call<NewsBean> getNews(@Query("key")String n,@Query("num") int i);
public Flowable<NewsBean> getNews(@Query("key")String n,@Query("num") int i);
// @GET("{token}")
// public Flowable<ShopResponse<HomeData>> homepage(@Path("token") String token, @Query("uri") String uri);
}
对Retrofit的封装:
public class RetrofitHelper {private static OkHttpClient client;
private static ServiceAPI serviceAPI;
static {
getClient();
}
public static OkHttpClient getClient(){
if(client==null){
synchronized (OkHttpClient.class){
if(client==null){
client=new OkHttpClient();
}
}
}
return client;
}
public static ServiceAPI getServiceAPI(){
if(serviceAPI==null){
synchronized (ServiceAPI.class){
if(serviceAPI==null){
serviceAPI=onCreate(ServiceAPI.class,API.HOST);
}
}
}
return serviceAPI;
}
public static <T> T onCreate(Class<T> tclass, String url){
Retrofit build = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
return build.create(tclass);
}
}
封装Bean类省略
MVP
Model层:
public interface CGSB <T>{void chengGong(T t);
void shiBai(Call<T> call);
}
public interface NewsModelJK { void getNews(String url, int i, CGSB<NewsBean> cgsb); }
public class NewsModel implements NewsModelJK { public void getNews(String url, int i, final CGSB<NewsBean> cgsb){ Flowable<NewsBean> obserable = RetrofitHelper.getServiceAPI().getNews(url, i);//被观察者 obserable.subscribeOn(Schedulers.io())//被观察者 Scheduler (调度器) .observeOn(AndroidSchedulers.mainThread()) //观察者 切换到主线程 .subscribe(new Consumer<NewsBean>() { @Override public void accept(NewsBean newsBean) throws Exception { //调用成功的方法 cgsb.chengGong(newsBean); } }); } }
P层:
public interface INews {
void showBean(NewsBean newsBean);
}
public class NewsPersenter { private final NewsModel newsModel; private INews iNews; public NewsPersenter(INews iNews) { newsModel = new NewsModel(); this.iNews=iNews; } public void getNews(final String n, int i){ newsModel.getNews(n, i, new CGSB<NewsBean>() { @Override public void chengGong(NewsBean newsBean) { iNews.showBean(newsBean); } @Override public void shiBai(Call<NewsBean> call) { } }); } }
public class MainActivity extends AppCompatActivity implements INews { private XRecyclerView mXrlv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); NewsPersenter newsPersenter = new NewsPersenter(this); newsPersenter 61f7 .getNews("71e58b5b2f930eaf1f937407acde08fe", 10); /** * 沉浸式 */ initState(); } @Override public void showBean(NewsBean newsBean) { // Log.i("Tag", newsBean.getMsg()); List<NewsBean.NewslistBean> newslist = newsBean.getNewslist(); mXrlv.setLayoutManager(new LinearLayoutManager(this)); MyAdapter myAdapter = new MyAdapter(newslist, this); mXrlv.setAdapter(myAdapter); } private void initView() { mXrlv = (XRecyclerView) findViewById(R.id.xrlv); } /** * 沉浸式状态栏 */ private void initState() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } }
相关文章推荐
- Android Material Design + MVP + Rxjava + Retrofit + Okhttp + Glide一个小项目
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- MVP和Retrofit+Rxjava+OkHttp封装结合请求数据
- Retrofit+Rxjava+Okhttp+MVP
- 简单MVP-Retrofit-Rxjava-OKhttp
- Android MVP架构(RxJava+SQLBrite+Retrofit+OkHttp+Glide)
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- MVP+Rxjava+Okhttp+Retrofit+XRecyclerview请求数据
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- RxJava+Retrofit+OkHttp+mvp
- mvp+rxjava+retrofit+okhttp
- MVP+Retrofit+Okhttp+RxJava
- Rxjava+Retrofit+okhttp+mvp实现
- MVP+Retrofit+RxJava+Okhttp构造一个合格的Android框架
- MVP+xRecyclerView+Retrofit+OkHttp++RxJava
- rxjava+retrofit+okhttp+mvp 简单实践
- RxJava+okhttp+Retrofit+Mvp 的封装
- Android——MVP+xRecyclerView+Retrofit+OkHttp+RxJava结合应用
- Retrofit+RxJava+Okhttp+RecycleView+MVP简单的展示数据
- retrofit+mvp+okhttp+rxjava封装