MVP+Retrofit+RecyclerView实现加载网络数据

依赖

    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.facebook.fresco:fresco:0.11.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    //若和观察者结合的话,需加上如下依赖:
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'

View

public interface IShowData {
    public void showData(List<Bea.ResultsBean> list);
}

Model

public interface IGetData {
    public void getData(Observer observer);
}


public class GetData implements IGetData{
    @Override
    public void getData(Observer observer) {
        Retrofit retrofit=new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("http://gank.io/")
                .build();
        UserUrl userUrl=retrofit.create(UserUrl.class);
        userUrl.getCall(10,1).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(observer);
    }
}

工具类

public interface UserUrl {
//参数是可以变化的
    @GET("api/data/Android/{size}/{page}")
    Observable<Bea> getCall(@Path("size") int size, @Path("page") int page);
}

Presenter

public class DataPresenter {
    GetData model;
    IShowData view;
    List<Bea.ResultsBean> list=new ArrayList<>();

    public DataPresenter(IShowData view) {
        this.view=view;
       this.model=new GetData();
    }

    public void getDPData() {
        model.getData(new Observer<Bea>(){

            @Override
            public void onCompleted() {
                Log.i("111111P","onCompleted()");
            }

            @Override
            public void onError(Throwable e) {
                Log.i("111111P","onError()");
            }

            @Override
            public void onNext(Bea bea) {
            Log.i("111111P","onNext()");
            list.addAll(bea.getResults());
            view.showData(list);
            Log.i("111111P",list+"");
            }
        });
    }
}

Fragment

public class Fra_tb1 extends Fragment implements IShowData{
    private View view;
    private RecyclerView mRv;
    List<Bea.ResultsBean> list;
    DataPresenter presenter;
    MyAdapter adapter;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = View.inflate(getContext(), R.layout.frag_tb1, null);
        initView(view);
        list=new ArrayList<>();
        presenter=new DataPresenter(this);
        showData(list);
        presenter.getDPData();
        return view;
    }

    private void initView(View view) {
        mRv = (RecyclerView) view.findViewById(R.id.rv);
    }

    @Override
    public void showData(List<Bea.ResultsBean> list) {
        LinearLayoutManager manager = new LinearLayoutManager(getContext());
        mRv.setLayoutManager(manager);
        adapter = new MyAdapter(getContext(),list);
        mRv.setAdapter(adapter);
    }
}

适配器

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    Context context;
    List<Bea.ResultsBean> list=new ArrayList<>();

    public MyAdapter(Context context, List<Bea.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context, R.layout.item,null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Uri uri=Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1512194192440&di=060d73d7e3d302a94ba25fe7e108d43e&imgtype=0&src=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201610%2F30%2F20161030083724_YEByt.jpeg");
        ((MyViewHolder)holder).sdv.setImageURI(uri);
        ((MyViewHolder)holder).tv.setText(list.get(position).getDesc());
        Log.i("111111",list+"");
    }

    @Override
    public int getItemCount() {
        return list!=null?list.size():0;
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
        SimpleDraweeView sdv;
        TextView tv;
        public MyViewHolder(View itemView) {
            super(itemView);
            sdv=itemView.findViewById(R.id.sdv);
            tv=itemView.findViewById(R.id.tv);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值