Retrofit+RxJava+Fresco+MVP

来源:互联网 发布:淘宝店铺营销策略 编辑:程序博客网 时间:2024/05/16 05:10
==================所用的依赖compile 'com.android.support:recyclerview-v7:25.3.1'compile 'com.google.code.gson:gson:2.2.4'compile 'com.facebook.fresco:fresco:0.11.0'compile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'//compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'compile 'com.squareup.okhttp3:okhttp:3.1.2'compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'compile 'com.squareup.okhttp3:okhttp:3.9.0'




=================================//网络请求用 的接口public interface GetRequest_In { //get注解中的值 就是拼在baseUrl地址后面的值 配合组成一个完成的请求地址 @GET("top250") Call<Bean> getCall();}
==============================MM层================
//创建接口public interface Imm {    //将观察者传(bean)进去    public void shuju(Observer<Bean> observer);}
 
//实现接口public class Model implements Imm {    private Bean bean;    @Override    public void shuju(Observer<Bean> observer) {        //创建被观察者        Observable.create(new Observable.OnSubscribe<Bean>() {            @Override            public void call(final Subscriber<? super Bean> subscriber) {              //Retrofit的请求数据                Retrofit  retrofit=new Retrofit.Builder()                        //设置网络请求的url                        .baseUrl("https://api.douban.com/v2/movie/")                        //设置Gson                        .addConverterFactory(GsonConverterFactory.create())                        //设置Rxjava                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                        .build();                //创建网络请求接口的实例                GetRequest_In  Request=retrofit.create(GetRequest_In.class);                //对发的请求进行封装                Call<Bean> call=Request.getCall();                //使用异步发送网络请求                call.enqueue(new Callback<Bean>(){                 //请求成功时回调                    @Override                    public void onResponse(Call<Bean> call, Response<Bean> response) {                        bean=response.body();                        //调用OnNext方法把值传给观察者                        subscriber.onNext(bean);                        subscriber.onCompleted();                    }                    //请求失败时的回调                    @Override                    public void onFailure(Call<Bean> call, Throwable t) {                    }                });            }        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }}
===========================VV层===========================
//展示数据的接口public interface Ivv {    //方法有参bean    public void ShowView(Bean bean);}
============================PP层===============================
public class Presenter {//定义属性    Context context;    Model   mm;    Ivv     vv;    public Presenter(Context context, Ivv vv) {        this.context = context;        this.vv = vv;        mm=new Model();    }//创建方法    public void getData(){        mm.shuju(new Observer<Bean>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            //将bean的值让V层接受            @Override            public void onNext(Bean bean) {                      vv.ShowView(bean);            }        });    }}
====================================适配器====================
public class Myadapter extends RecyclerView.Adapter<Myadapter.MyViewHolder> {    Context context;    Bean bean;    public Myadapter(Context context, Bean bean) {        this.context = context;        this.bean = bean;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View   view=View.inflate(context,R.layout.item,null);        MyViewHolder   holder=new MyViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        holder.tv.setText(bean.getSubjects().get(position).getOriginal_title());        DraweeController  dc= Fresco.newDraweeControllerBuilder()                .setUri(bean.getSubjects().get(position).getCasts().get(0).getAvatars().getSmall())                .setAutoPlayAnimations(true)                .build();        holder.iv.setController(dc);    }    @Override    public int getItemCount() {        return bean.getSubjects().size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        private final SimpleDraweeView iv;        private final TextView tv;        public MyViewHolder(View itemView) {            super(itemView);            iv = (SimpleDraweeView) itemView.findViewById(R.id.fec);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }}
================================MainActivity==============
//实现V层接口public class MainActivity extends AppCompatActivity implements Ivv{    RecyclerView   rv;    Bean    bean;    Myadapter  adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Fresco.initialize(this);        setContentView(R.layout.activity_main);        rv= (RecyclerView) findViewById(R.id.rv);        //实例化P层的java类        Presenter   pp=new Presenter(this,this);        //调用方法        pp.getData();    }    //重写的展示数据方法    @Override    public void ShowView(Bean bean) {       //rv的操作        LinearLayoutManager   manager=new LinearLayoutManager(this);        rv.setLayoutManager(manager);        rv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));        //实例化适配器        adapter=new Myadapter(MainActivity.this,bean);        //赋值        rv.setAdapter(adapter);    }}
==============Bean自创========================
原创粉丝点击