MVP(Retrofit+RXJava)实现网络请求
来源:互联网 发布:辐射3低配置优化补丁 编辑:程序博客网 时间:2024/04/30 16:57
版权声明:本文为博主原创文章,未经博主允许不得转载。
Model 模型 view 视图 presenter层 (桥梁)
每一层都有一个接口来下面直接上代码:
=========================================================================
view 层
MainActivity :
view接口:
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import com.facebook.drawee.backends.pipeline.Fresco;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import bwie.com.day_rikao_1207.adparer.RecyclerAA;
- import bwie.com.day_rikao_1207.bean.Newslist;
- import bwie.com.day_rikao_1207.presenter.DataPresenter;
- import bwie.com.day_rikao_1207.view.IView;
- import static android.widget.LinearLayout.VERTICAL;
- public class MainActivity extends AppCompatActivity implements IView{
- private RecyclerView recy;
- private DataPresenter dataPresenter;
- private List<Newslist> list=new ArrayList<>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Fresco.initialize(this);
- setContentView(R.layout.activity_main);
- recy = (RecyclerView) findViewById(R.id.recy);
- HashMap<String,String> map = new HashMap<>();
- //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10
- map.put("key","71e58b5b2f930eaf1f937407acde08fe");
- map.put("num","10");
- dataPresenter = new DataPresenter();
- dataPresenter.acceachView(this);
- dataPresenter.getData(map);
- }
- @Override
- public void success(Object o) {
- if (o instanceof List){
- List<Newslist> news= (List<Newslist>) o;
- list.addAll(news);
- RecyclerAA recyclerAA = new RecyclerAA(this,list);
- recy.setAdapter(recyclerAA);
- LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,VERTICAL,false );
- recy.setLayoutManager(linearLayoutManager);
- recyclerAA.notifyDataSetChanged();
- }
- }
- @Override
- public void Failes(Exception e) {
- }
- //避免内存泄漏
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (dataPresenter!=null){
- dataPresenter.detechView();
- }
- }
- }
============================================================
- public interface IView {
- void success(Object o);
- void Failes(Exception e);
- }
Presenter 层:
p层接口:
- import java.util.List;
- import java.util.Map;
- import bwie.com.day_rikao_1207.bean.JsonRootBean;
- import bwie.com.day_rikao_1207.bean.Newslist;
- import bwie.com.day_rikao_1207.model.DataModel;
- import bwie.com.day_rikao_1207.model.IModel;
- import bwie.com.day_rikao_1207.view.IView;
- import io.reactivex.Flowable;
- import io.reactivex.android.schedulers.AndroidSchedulers;
- import io.reactivex.schedulers.Schedulers;
- import io.reactivex.subscribers.DisposableSubscriber;
- /**
- * Created by 迷人的脚毛!! on 2017/12/7.
- */
- public class DataPresenter implements BasePresenter{
- private IView iv;
- private DisposableSubscriber<JsonRootBean<List<Newslist>>> subscriber;
- public void acceachView(IView iv){
- this.iv=iv;
- }
- public void detechView(){
- if (iv!=null){
- iv=null;
- }
- if (subscriber!=null){
- if (!subscriber.isDisposed()){
- subscriber.dispose();
- }
- }
- }
- @Override
- public void getData(Map<String, String> map) {
- IModel model= new DataModel(this);
- model.getData(map);
- }
- public void getDatas(Flowable<JsonRootBean<List<Newslist>>> flowable){
- subscriber = flowable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(new DisposableSubscriber<JsonRootBean<List<Newslist>>>() {
- //普通事件
- @Override
- public void onNext(JsonRootBean<List<Newslist>> listJsonRootBean) {
- if (listJsonRootBean != null) {
- List<Newslist> newslist = listJsonRootBean.getNewslist();
- if (newslist != null) {
- iv.success(newslist);
- }
- }
- }
- //异常事件
- @Override
- public void onError(Throwable t) {
- iv.Failes(new Exception(t));
- }
- @Override
- public void onComplete() {
- }
- });
- }
- }
===========================================================
- public interface BasePresenter{
- void getData(Map<String,String> map);
- }
model层:
- import io.reactivex.Flowable;
- /**
- * Created by 迷人的脚毛!! on 2017/12/7.
- */
- public class DataModel implements IModel{
- private DataPresenter presenter;
- public DataModel(DataPresenter presenter) {
- this.presenter = presenter;
- }
- @Override
- public void getData(Map<String, String> map) {
- Flowable<JsonRootBean<List<Newslist>>> flowable = RetrofitUtil.getInstant().getApiService().getData(map);
- presenter.getDatas(flowable);
- }
- }
IModel 接口:========================================================================
- public interface IModel {
- void getData(Map<String,String> map);
- }
- public interface ApiService {
- //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10
- @GET("nba/")
- Flowable<JsonRootBean<List<Newslist>>> getData(@QueryMap Map<String,String> map);
- }
RetrofitUtil 工具类:
- import retrofit2.Retrofit;
- import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
- import retrofit2.converter.gson.GsonConverterFactory;
- public class RetrofitUtil {
- private static volatile RetrofitUtil instant;
- private ApiService apiService;
- private RetrofitUtil() {
- Retrofit retrofit = new Retrofit.Builder()
- .addConverterFactory(GsonConverterFactory.create())
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .baseUrl("http://api.tianapi.com/")
- .build();
- apiService = retrofit.create(ApiService.class);
- }
- public static RetrofitUtil getInstant(){
- if (null==instant){
- synchronized (RetrofitUtil.class){
- if (instant==null){
- instant=new RetrofitUtil();
- }
- }
- }
- return instant;
- }
- public ApiService getApiService(){
- return apiService;
- }
- }
阅读全文
0 0
- MVP(Retrofit+RXJava)实现网络请求
- 网络请求框架 Rxjava+ReTrofit+okHttp+MVP
- android+MVP+Retrofit+RxJava做网络请求
- MVP+Rxjava+Retrofit+Fresco网络请求数据
- MVP +Retrofit +Rxjava 请求
- 使用MVP+Retrofit+RxJava实现的的Android Demo (下)使用Retrofit+RxJava处理网络请求
- MVP模式实现网络请求数据并添加到列表(Rxjava+Retrofit)
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- mvp下rxjava+retrofit的登录网络请求demo
- Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- 简单的MVP+Retrofit+RxJava请求网络数据(一)
- Android 搭建MVP+Retrofit+RxJava网络请求框架
- MVP框架使用Retrofit+Rxjava请求网络数据
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- Retrofit + Rxjava + RxAndroid实现网络请求
- RXJava+Retrofit网络请求
- RxJava+Retrofit2+MVP实现网络请求
- MaxCompute2.0性能评测:更强大、更高效之上的更快速
- 关于发送jsonp请求的问题
- IE可以上网其他浏览器上不了
- windows串口读取C(3)
- 异步IO:Python中的协程
- MVP(Retrofit+RXJava)实现网络请求
- Linux驱动中,probe函数何时被调用
- 新的思想控制的假肢恢复了触觉的感觉
- 虚幻4内置后期效果
- Redis 有序集合(sorted set)
- LEADTOOLS V19 版本更新,文档和医疗成像技术速度和精度得到优化
- JSON基础
- Java实现AOP的两种方式
- 写给大数据开发初学者的话