==================所用的依赖 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自创========================
Retrofit+RxJava+Fresco+MVP
最新推荐文章于 2019-03-24 21:04:38 发布