MVP(Retrofit+RXJava)实现网络请求

来源:互联网 发布:辐射3低配置优化补丁 编辑:程序博客网 时间:2024/04/30 16:57


Model  模型   view 视图    presenter层 (桥梁)        


每一层都有一个接口来下面直接上代码:


=========================================================================

view 层

MainActivity  :
[java] view plain copy
  1. import android.os.Bundle;  
  2. import android.support.v7.app.AppCompatActivity;  
  3. import android.support.v7.widget.LinearLayoutManager;  
  4. import android.support.v7.widget.RecyclerView;  
  5.   
  6. import com.facebook.drawee.backends.pipeline.Fresco;  
  7.   
  8. import java.util.ArrayList;  
  9. import java.util.HashMap;  
  10. import java.util.List;  
  11.   
  12. import bwie.com.day_rikao_1207.adparer.RecyclerAA;  
  13. import bwie.com.day_rikao_1207.bean.Newslist;  
  14. import bwie.com.day_rikao_1207.presenter.DataPresenter;  
  15. import bwie.com.day_rikao_1207.view.IView;  
  16.   
  17. import static android.widget.LinearLayout.VERTICAL;  
  18.   
  19. public class MainActivity extends AppCompatActivity implements IView{  
  20.   
  21.     private RecyclerView recy;  
  22.     private DataPresenter dataPresenter;  
  23.     private  List<Newslist> list=new ArrayList<>();  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         Fresco.initialize(this);  
  29.         setContentView(R.layout.activity_main);  
  30.   
  31.         recy = (RecyclerView) findViewById(R.id.recy);  
  32.   
  33.         HashMap<String,String> map = new HashMap<>();  
  34.         //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10  
  35.         map.put("key","71e58b5b2f930eaf1f937407acde08fe");  
  36.         map.put("num","10");  
  37.         dataPresenter = new DataPresenter();  
  38.         dataPresenter.acceachView(this);  
  39.         dataPresenter.getData(map);  
  40.   
  41.     }  
  42.   
  43.     @Override  
  44.     public void success(Object o) {  
  45.         if (o instanceof List){  
  46.             List<Newslist> news= (List<Newslist>) o;  
  47.   
  48.             list.addAll(news);  
  49.             RecyclerAA recyclerAA = new RecyclerAA(this,list);  
  50.             recy.setAdapter(recyclerAA);  
  51.             LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,VERTICAL,false );  
  52.             recy.setLayoutManager(linearLayoutManager);  
  53.             recyclerAA.notifyDataSetChanged();  
  54.         }  
  55.   
  56.     }  
  57.   
  58.     @Override  
  59.     public void Failes(Exception e) {  
  60.   
  61.     }  
  62.   
  63.     //避免内存泄漏  
  64.     @Override  
  65.     protected void onDestroy() {  
  66.         super.onDestroy();  
  67.         if (dataPresenter!=null){  
  68.             dataPresenter.detechView();  
  69.         }  
  70.     }  
  71. }  
view接口:
[java] view plain copy
  1. public interface IView {  
  2.   
  3.     void success(Object o);  
  4.     void Failes(Exception e);  
  5. }  
============================================================
Presenter 层:
[java] view plain copy
  1. import java.util.List;  
  2. import java.util.Map;  
  3.   
  4. import bwie.com.day_rikao_1207.bean.JsonRootBean;  
  5. import bwie.com.day_rikao_1207.bean.Newslist;  
  6. import bwie.com.day_rikao_1207.model.DataModel;  
  7. import bwie.com.day_rikao_1207.model.IModel;  
  8. import bwie.com.day_rikao_1207.view.IView;  
  9. import io.reactivex.Flowable;  
  10. import io.reactivex.android.schedulers.AndroidSchedulers;  
  11. import io.reactivex.schedulers.Schedulers;  
  12. import io.reactivex.subscribers.DisposableSubscriber;  
  13.   
  14. /** 
  15.  * Created by 迷人的脚毛!! on 2017/12/7. 
  16.  */  
  17.   
  18. public class DataPresenter implements BasePresenter{  
  19.   
  20.     private IView iv;  
  21.     private DisposableSubscriber<JsonRootBean<List<Newslist>>> subscriber;  
  22.   
  23.     public void acceachView(IView iv){  
  24.         this.iv=iv;  
  25.     }  
  26.   
  27.     public void detechView(){  
  28.         if (iv!=null){  
  29.             iv=null;  
  30.         }  
  31.         if (subscriber!=null){  
  32.             if (!subscriber.isDisposed()){  
  33.                 subscriber.dispose();  
  34.             }  
  35.         }  
  36.     }  
  37.   
  38.     @Override  
  39.     public void getData(Map<String, String> map) {  
  40.   
  41.         IModel model= new DataModel(this);  
  42.         model.getData(map);  
  43.     }  
  44.   
  45.     public void getDatas(Flowable<JsonRootBean<List<Newslist>>> flowable){  
  46.         subscriber = flowable.subscribeOn(Schedulers.io())  
  47.                 .observeOn(AndroidSchedulers.mainThread())  
  48.                 .subscribeWith(new DisposableSubscriber<JsonRootBean<List<Newslist>>>() {  
  49.                     //普通事件  
  50.                     @Override  
  51.                     public void onNext(JsonRootBean<List<Newslist>> listJsonRootBean) {  
  52.   
  53.                         if (listJsonRootBean != null) {  
  54.                             List<Newslist> newslist = listJsonRootBean.getNewslist();  
  55.                             if (newslist != null) {  
  56.                                 iv.success(newslist);  
  57.                             }  
  58.                         }  
  59.   
  60.                     }  
  61.   
  62.                     //异常事件  
  63.                     @Override  
  64.                     public void onError(Throwable t) {  
  65.                         iv.Failes(new Exception(t));  
  66.   
  67.                     }  
  68.   
  69.                     @Override  
  70.                     public void onComplete() {  
  71.   
  72.                     }  
  73.                 });  
  74.   
  75.   
  76.     }  
  77. }  
p层接口:
[java] view plain copy
  1. public interface BasePresenter{  
  2.     void getData(Map<String,String> map);  
  3.   
  4. }  
===========================================================
model层:
[java] view plain copy
  1. import io.reactivex.Flowable;  
  2.   
  3. /** 
  4.  * Created by 迷人的脚毛!! on 2017/12/7. 
  5.  */  
  6.   
  7. public class DataModel implements IModel{  
  8.   
  9.     private DataPresenter presenter;  
  10.   
  11.     public DataModel(DataPresenter presenter) {  
  12.         this.presenter = presenter;  
  13.     }  
  14.   
  15.     @Override  
  16.     public void getData(Map<String, String> map) {  
  17.   
  18.         Flowable<JsonRootBean<List<Newslist>>> flowable = RetrofitUtil.getInstant().getApiService().getData(map);  
  19.   
  20.         presenter.getDatas(flowable);  
  21.     }  
  22. }  
IModel 接口:
[java] view plain copy
  1. public interface IModel {  
  2.   
  3.     void getData(Map<String,String> map);  
  4.   
  5. }  
========================================================================
[java] view plain copy
  1. public interface ApiService {  
  2.   
  3.     //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10  
  4.     @GET("nba/")  
  5.     Flowable<JsonRootBean<List<Newslist>>> getData(@QueryMap Map<String,String> map);  
  6. }  
RetrofitUtil   工具类:
[java] view plain copy
  1. import retrofit2.Retrofit;  
  2. import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;  
  3. import retrofit2.converter.gson.GsonConverterFactory;  
  4.    
  5.   
  6. public class RetrofitUtil {  
  7.     private static volatile RetrofitUtil instant;  
  8.     private ApiService apiService;  
  9.   
  10.   
  11.     private RetrofitUtil() {  
  12.         Retrofit retrofit = new Retrofit.Builder()  
  13.                 .addConverterFactory(GsonConverterFactory.create())  
  14.                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())  
  15.                 .baseUrl("http://api.tianapi.com/")  
  16.                 .build();  
  17.   
  18.         apiService = retrofit.create(ApiService.class);  
  19.     }  
  20.   
  21.     public static RetrofitUtil getInstant(){  
  22.         if (null==instant){  
  23.             synchronized (RetrofitUtil.class){  
  24.                 if (instant==null){  
  25.                     instant=new RetrofitUtil();  
  26.                 }  
  27.             }  
  28.         }  
  29.         return instant;  
  30.   
  31.     }  
  32.     public ApiService getApiService(){  
  33.         return apiService;  
  34.     }  

阅读全文
0 0
原创粉丝点击