retrofit+rxjava+mvp网络请求数据

//依赖
    //Fresco第三方加载图片框架依赖 四个依赖
    compile 'com.facebook.fresco:fresco:1.3.0'
    // 支持webp
    compile 'com.facebook.fresco:webpsupport:1.3.0'
    // gif加载使用
    compile 'com.facebook.fresco:animated-gif:1.3.0'
    // WebP(静态图+动图)加载使用
    compile 'com.facebook.fresco:animated-webp:1.3.0'
    compile 'com.jcodecraeer:xrecyclerview:1.5.2'

    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//main_activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="zjc.com.day07rk.view.MainActivity">

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xrecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.jcodecraeer.xrecyclerview.XRecyclerView>

</LinearLayout>
//item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_marginLeft="10dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/item_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="勇士大战火箭"
            android:textColor="#000"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/item_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="35dp"
            android:text="时间" />
    </LinearLayout>

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/item_simple"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        fresco:roundAsCircle="true"/>
</LinearLayout>
//Model
//IModel
package zjc.com.day07rk.model;

import java.util.Map;

/**
 * Created by ASUS on 2018/5/16.
 */

public interface IModel {
    void getJsonDateForm(String url, Map<String,String> params);
}
//ModelImpl
package zjc.com.day07rk.model;

import android.util.Log;

import java.util.Map;

import rx.Observable;
import rx.Observer;
import rx.Scheduler;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import zjc.com.day07rk.http.RetrofitService;
import zjc.com.day07rk.http.RetrofitUtils;
import zjc.com.day07rk.presenter.IPresenter;

/**
 * Created by ASUS on 2018/5/16.
 */

public class ModelImpl implements IModel {
    private static final String TAG = "ModelImpl";
    private final IPresenter iPresenter;

    public ModelImpl(IPresenter iPresenter){
        this.iPresenter = iPresenter;
    }
    @Override
    public void getJsonDateForm(String url, Map<String, String> params) {
        RetrofitUtils retrofitUtils = RetrofitUtils.getRetrofitUtils();
        RetrofitService service = retrofitUtils.createRequest(RetrofitService.class);
        Observable<NBABean> observable = service.getRequest(params);
        observable.subscribeOn(Schedulers.io())//子线程使用io流线程加载数据
                .observeOn(AndroidSchedulers.mainThread())//主线程展示数据
                .subscribe(new Observer<NBABean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError: "+e.getMessage());
                        iPresenter.getJsonError(e.getMessage());
                    }

                    @Override
                    public void onNext(NBABean nbaBean) {
                        Log.d(TAG, "onNext: "+nbaBean.getMsg());
                        iPresenter.getJsonSuccess(nbaBean.getNewslist());
                    }
                });
    }
}
//Presenter
//IPresenter
package zjc.com.day07rk.presenter;

import java.util.List;

import zjc.com.day07rk.model.IModel;
import zjc.com.day07rk.model.NBABean;
import zjc.com.day07rk.view.IMainView;

/**
 * Created by ASUS on 2018/5/16.
 */ 

public interface IPresenter {
    void formDateToJsonView(IModel iModel, IMainView iMainView);

    void getJsonSuccess(List<NBABean.NewslistBean> newslist);

    void getJsonError(String error);

}
//PresenterImpl
package zjc.com.day07rk.presenter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import zjc.com.day07rk.model.IModel;
import zjc.com.day07rk.model.NBABean;
import zjc.com.day07rk.view.IMainView;

/**
 * Created by ASUS on 2018/5/16.
 */

public class PresenterImpl implements IPresenter {
    private IMainView iMainView;

    @Override
    public void formDateToJsonView(IModel iModel, IMainView iMainView) {
        this.iMainView = iMainView;
        Map<String,String> params = new HashMap<>();
        params.put("key","71e58b5b2f930eaf1f937407acde08fe");
        params.put("num",iMainView.getNum());
        iModel.getJsonDateForm(null,params);
    }

    @Override
    public void getJsonSuccess(List<NBABean.NewslistBean> newslist) {
        iMainView.getJsonToViewSuccess(newslist);
    }

    @Override
    public void getJsonError(String error) {
        iMainView.getJsonToViewError(error);
    }
}
//View
//IMainView
package zjc.com.day07rk.view;

import java.util.List;

import zjc.com.day07rk.model.NBABean;

/**
 * Created by ASUS on 2018/5/16.
 */

public interface IMainView {

    void getJsonToViewSuccess(List<NBABean.NewslistBean> newslist);

    void getJsonToViewError(String error);

    String getNum();
}
//MainView
package zjc.com.day07rk.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;

import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.List;

import zjc.com.day07rk.R;
import zjc.com.day07rk.model.ModelImpl;
import zjc.com.day07rk.model.NBABean;
import zjc.com.day07rk.presenter.PresenterImpl;

public class MainActivity extends AppCompatActivity implements IMainView {
    private static final String TAG = "MainActivity";
    private XRecyclerView xRecyclerView;
    private List<NBABean.NewslistBean> list;
    private int num = 10;
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        initData();
    }

    private void initViews() {
        xRecyclerView = findViewById(R.id.xrecyclerView);
        xRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                num++;
                initData();
                adapter.notifyDataSetChanged();
                //停止刷新
                xRecyclerView.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                num++;
                initData();
                adapter.notifyDataSetChanged();
                //停止加载更多
                xRecyclerView.loadMoreComplete();
            }
        });
    }

    private void initData() {
        PresenterImpl presenter = new PresenterImpl();
        presenter.formDateToJsonView(new ModelImpl(presenter),this);
    }

    @Override
    public void getJsonToViewSuccess(List<NBABean.NewslistBean> newslist) {
        this.list = newslist;
        Log.d(TAG, "getJsonToViewSuccess: "+list);
        adapter = new MyAdapter(MainActivity.this,list);
        xRecyclerView.setAdapter(adapter);
    }

    @Override
    public void getJsonToViewError(String error) {
        Log.d(TAG, "getJsonToViewError: "+error);
    }

    @Override
    public String getNum() {
        return num+"";
    }
}
//MyAdapter
package zjc.com.day07rk.view;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

import retrofit2.http.POST;
import zjc.com.day07rk.R;
import zjc.com.day07rk.model.NBABean;

/**
 * Created by ASUS on 2018/5/16.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private final Context context;
    private final List<NBABean.NewslistBean> list;

    public MyAdapter(Context context, List<NBABean.NewslistBean> newslist){
        this.context = context;
        this.list = newslist;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.xrecycler_item, parent, false);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String picUrl = list.get(position).getPicUrl();
        holder.getItem_simple().setImageURI(picUrl);
        holder.getItem_count().setText(list.get(position).getTitle());
        holder.getItem_time().setText(list.get(position).getCtime());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final SimpleDraweeView item_simple;
        private final TextView item_count;
        private final TextView item_time;

        public MyViewHolder(View itemView) {
            super(itemView);
            item_simple = itemView.findViewById(R.id.item_simple);
            item_count = itemView.findViewById(R.id.item_count);
            item_time = itemView.findViewById(R.id.item_time);
        }

        public SimpleDraweeView getItem_simple() {
            return item_simple;
        }

        public TextView getItem_count() {
            return item_count;
        }

        public TextView getItem_time() {
            return item_time;
        }
    }
}
//BeanUtils
//NewsBean
package zjc.com.day07rk.model;

import java.util.List;

/**
 * Created by ASUS on 2018/5/16.
 */

public class NBABean {

    /**
     * code : 200
     * msg : success
     * newslist : [{"ctime":"2016-12-04 13:00","title":"格林:理解科尔吸食大麻 不过我从没吸过","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg","url":"http://www.51tyw.com/nba/2421.html"},{"ctime":"2016-12-04 00:00","title":"三分纪录延续!火箭队连续19场比赛命中10+三分球","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203233J3.jpg","url":"http://www.51tyw.com/nba/2417.html"},{"ctime":"2016-12-04 00:00","title":"詹姆斯谈三连败:是时候紧起来了 必须打得男人点","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203234010.jpg","url":"http://www.51tyw.com/nba/2418.html"},{"ctime":"2016-12-03 12:00","title":"骑士输赢都靠三分?那还要詹姆斯做什么?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203104344.jpg","url":"http://www.51tyw.com/nba/2407.html"},{"ctime":"2016-12-03 00:00","title":"公牛vs骑士直播看点:詹伟兄弟对决","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202221205.jpg","url":"http://www.51tyw.com/nba/2395.html"},{"ctime":"2016-12-02 22:00","title":"火箭和勇士联手创NBA三分纪录","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202214212.jpg","url":"http://www.51tyw.com/nba/2392.html"},{"ctime":"2016-12-02 22:00","title":"巴克利:勇士打得像女式篮球,太软了!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202215032.jpg","url":"http://www.51tyw.com/nba/2394.html"},{"ctime":"2016-12-02 20:00","title":"詹姆斯完成月最佳球员4连霸的壮举!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-1612021PI0.jpg","url":"http://www.51tyw.com/nba/2388.html"},{"ctime":"2016-12-01 00:00","title":"威少再下三双战书!詹皇会不会先认怂?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q13251.jpg","url":"http://www.51tyw.com/nba/2374.html"},{"ctime":"2016-12-01 00:00","title":"骑士这样的防守想夺冠?也许卫冕只是空谈!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161130/1-161130222229.jpg","url":"http://www.51tyw.com/nba/2375.html"}]
     */

    private String code;
    private String msg;
    private List<NewslistBean> newslist;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {
        /**
         * ctime : 2016-12-04 13:00
         * title : 格林:理解科尔吸食大麻 不过我从没吸过
         * description : NBA新闻
         * picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg
         * url : http://www.51tyw.com/nba/2421.html
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值