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

来源:互联网 发布:java汽车租赁系统代码 编辑:程序博客网 时间:2024/06/04 18:11

依赖

    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