MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示

来源:互联网 发布:python pyqt5 安装 编辑:程序博客网 时间:2024/06/04 18:12

依赖如下

  compile 'com.squareup.retrofit2:retrofit:2.0.2'    // Retrofit库    compile 'com.squareup.okhttp3:okhttp:3.1.2'    // Okhttp库    compile 'io.reactivex.rxjava2:rxjava:2.0.3'    //Rxjava    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    //Rxandroid    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'    compile 'com.android.support:cardview-v7:26.0.0-alpha1'    compile 'com.facebook.fresco:fresco:0.11.0'    //fresco    compile 'com.squareup.retrofit2:converter-gson:2.0.2'    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

V层

import java.util.List;public interface ISongView {    void show(List<ShuxingBean> list);}

M层

import io.reactivex.Observer;public interface ISongModel {        void getData(Observer<ShuxingBean> observer);}
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import java.util.List;import io.reactivex.Observer;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import io.reactivex.Scheduler;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;public class SongModel implements ISongModel {    ShuxingBean bean;    @Override    public void getData(Observer<ShuxingBean> observer) {        Observable.create(new ObservableOnSubscribe<ShuxingBean>() {            @Override            public void subscribe(final ObservableEmitter<ShuxingBean> e) throws Exception {                //Retrofit请求数据                Retrofit retrofit = new Retrofit.Builder()                        .baseUrl("http://m.yunifang.com/") // 设置 网络请求 Url                        .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)                        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                        .build();                //创建 网络请求接口 的实例                GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);                //对 发送请求 进行封装                Call<ShuxingBean> call = request.getCall();                //发送网络请求(异步)                call.enqueue(new Callback<ShuxingBean>() {                    //请求成功时回调                    @Override                    public void onResponse(Call<ShuxingBean> call, Response<ShuxingBean> response) {                        // 处理返回的数据结果                        bean=response.body();                        Log.i("xx",bean.toString());                        Log.i("=============",bean.toString());                        e.onNext(bean);                        e.onComplete();                    }                    //请求失败时回调                    @Override                    public void onFailure(Call<ShuxingBean> call, Throwable throwable) {                        System.out.println("连接失败");                    }                });            }        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);    }}

P层

import io.reactivex.Observer;import io.reactivex.disposables.Disposable;public class SongPresent {   Context context;   ISongModel model;   ISongView view;   public SongPresent(Context context,ISongView view){           this.context=context;           this.view=view;           model=new SongModel();   }   public void getDatas(){           model.getData(new Observer<ShuxingBean>() {               @Override               public void onSubscribe(Disposable d) {               }               @Override               public void onNext(ShuxingBean shuxingBean) {                  ArrayList list= new ArrayList<ShuxingBean>();                   for (int i=0;i<shuxingBean.getData().size();i++){                       list.add(shuxingBean);                   }                  view.show(list);               }               @Override               public void onError(Throwable e) {               }               @Override               public void onComplete() {               }           });   }   }

Main

public class MainActivity extends AppCompatActivity implements ISongView{    RecyclerView rv;    RCViewAdapter adapter;    SongPresent present;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Fresco.initialize(this);        setContentView(R.layout.activity_main);        rv= (RecyclerView) findViewById(R.id.rv);        present=new SongPresent(this,(ISongView)this);        present.getDatas();    }    @Override    public void show(List<ShuxingBean> list) {        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));        adapter=new RCViewAdapter(MainActivity.this,list);        rv.setAdapter(adapter);    }}

工具类

import retrofit2.Call;import retrofit2.http.GET;public interface GetRequest_Interface {    @GET("yunifang/mobile/goods/getall?random=91873&encode=68301f6ea0d6adcc0fee63bd21815d69")    Call<ShuxingBean> getCall();}

适配器

    private Context context;    private List<ShuxingBean> bean;    private OnItemClickListener mOnItemClickListener = null;    public RCViewAdapter(Context context,List<ShuxingBean> bean) {        this.context = context;        this.bean = bean;    }    public static interface OnItemClickListener {        void onItemClick(View view, int position);    }    public void onClick(View v) {        if (mOnItemClickListener != null) {            //注意这里使用getTag方法获取position            mOnItemClickListener.onItemClick(v,(int)v.getTag());        }    }    public void setOnItemClickListener(OnItemClickListener listener) {        this.mOnItemClickListener = listener;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //View view = LayoutInflater.from(context).inflate(R.layout.item, parent,false);        View view =View.inflate(context,R.layout.item,null);        MyHolder holder = new MyHolder(view);        return holder;    }    @Override    public void onBindViewHolder(MyHolder holder, int position) {        holder.tv.setText(bean.get(position).getData().get(position).getGoods_name());        Uri uri = Uri.parse(bean.get(position).getData().get(position).getGoods_img());        holder.sdv.setImageURI(uri);    }    @Override    public int getItemCount() {        if(bean!=null){            return bean.size();        }        return 0;    }    class MyHolder extends RecyclerView.ViewHolder {        TextView tv;       SimpleDraweeView sdv;        public MyHolder(View itemView) {            super(itemView);            tv=itemView.findViewById(R.id.tv);            sdv=itemView.findViewById(R.id.iv);        }    }}

ShuxingBean是自己的封装Bean

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