MVP+RXJAVA+Retrofit+Fresco实现简单的效果

来源:互联网 发布:mac 维修 编辑:程序博客网 时间:2024/05/18 00:42
package com.example.rxjavakuangjia1.utils;/** * Created by HP on 2017/12/5. */public class BaseUrl {    public static String url="http://api.tianapi.com/";

}

首先先写下接口类

package com.example.rxjavakuangjia1.utils;import com.example.rxjavakuangjia1.bean.Bean;import retrofit2.http.GET;import rx.Observable;/** * Created by HP on 2017/12/5. */public interface BaseRetrofit {    @GET("nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10")    Observable<Bean> getCall();    //@Query("key")int key,@Query("num")String num}
然后使用Retrofit拼接接口



生成bean类这里就不写了

package com.example.rxjavakuangjia1.view;import com.example.rxjavakuangjia1.bean.Bean;/** * Created by HP on 2017/12/5. */public interface IView {    void show(Bean bean);}
然后去生成view层的东西

package com.example.rxjavakuangjia1.model;import com.example.rxjavakuangjia1.bean.Bean;import com.example.rxjavakuangjia1.utils.BaseRetrofit;import com.example.rxjavakuangjia1.utils.BaseUrl;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Observable;import rx.Observer;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;/** * Created by HP on 2017/12/5. */public class Model {    public void getData(Observer<Bean> observer){//        OkHttpClient okHttpClient=new OkHttpClient.Builder()//                .build();        Retrofit retrofit=new Retrofit.Builder()                .baseUrl(BaseUrl.url)//                .client(okHttpClient)                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .addConverterFactory(GsonConverterFactory.create())                .build();        BaseRetrofit baseRetrofit=retrofit.create(BaseRetrofit.class);        Observable<Bean> observable=baseRetrofit.getCall();        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }}
再去生成model层

package com.example.rxjavakuangjia1.preseter;import com.example.rxjavakuangjia1.bean.Bean;import com.example.rxjavakuangjia1.model.Model;import com.example.rxjavakuangjia1.view.IView;import rx.Observer;/** * Created by HP on 2017/12/5. */public class Presenter {    IView iView;    private final Model model;    public Presenter(IView iView) {        this.iView = iView;        model = new Model();    }    public void GetUrl(){        model.getData(new Observer<Bean>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(Bean bean) {                iView.show(bean);            }        });    }    public void delete(){        iView=null;    }}
最后去生成perseter类

package com.example.rxjavakuangjia1.utils;import android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;/** * Created by HP on 2017/12/5. */public class MyApp extends Application {    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}
如果使用Fresco必须首先进行初始化

package com.example.rxjavakuangjia1;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import com.example.rxjavakuangjia1.bean.Bean;import com.example.rxjavakuangjia1.preseter.Presenter;import com.example.rxjavakuangjia1.view.IView;import com.jcodecraeer.xrecyclerview.XRecyclerView;import static android.R.attr.data;public class MainActivity extends AppCompatActivity implements IView {    private XRecyclerView xrecy;    private Presenter presenter;//    private TextView ttt;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        xrecy = (XRecyclerView) findViewById(R.id.xrecy);        presenter = new Presenter(this);        presenter.GetUrl();    }    @Override    public void show(Bean bean) {        System.out.println("===========" + data + bean);        LinearLayoutManager manager = new LinearLayoutManager(this);        xrecy.setLayoutManager(manager);        xrecy.setAdapter(new Adapter(this, bean));    }    @Override    protected void onDestroy() {        super.onDestroy();        presenter.delete();    }}
再去写下主类

package com.example.rxjavakuangjia1;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.rxjavakuangjia1.bean.Bean;import com.facebook.drawee.backends.pipeline.Fresco;import com.facebook.drawee.interfaces.DraweeController;import com.facebook.drawee.view.SimpleDraweeView;import com.jcodecraeer.xrecyclerview.XRecyclerView;/** * Created by HP on 2017/12/5. */public class Adapter extends XRecyclerView.Adapter<Adapter.MyViewHolder>{    Context context;    private  TextView tv;//    private List<Bean.NewslistBean> data;    private Bean bean;//    private ImageView sim;    private SimpleDraweeView sim;    public Adapter(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) {        tv.setText(bean.getNewslist().get(position).getTitle());//        sim.setImageURI(bean.getNewslist().get(position).getPicUrl());        DraweeController controller = Fresco.newDraweeControllerBuilder()                .setUri(bean.getNewslist().get(position).getPicUrl())                .setAutoPlayAnimations(true)                .build();        sim.setController(controller);//        Glide.with(context).load(bean.getNewslist().get(position).getPicUrl()).into(sim);    }    @Override    public int getItemCount() {        return bean.getNewslist().size();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        public MyViewHolder(View itemView) {            super(itemView);            //img = itemView.findViewById(R.id.img);            tv = itemView.findViewById(R.id.tv);            sim=itemView.findViewById(R.id.sim);        }    }}
这个便是适配器类

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" android:orientation="vertical"    tools:context="com.example.rxjavakuangjia1.MainActivity">    <!--<TextView-->        <!--android:id="@+id/ttt"-->        <!--android:layout_width="wrap_content"-->        <!--android:layout_height="wrap_content" />-->    <com.jcodecraeer.xrecyclerview.XRecyclerView        android:id="@+id/xrecy"        android:layout_width="match_parent"        android:layout_height="match_parent">    </com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>
这个是主类的布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:fresco="http://schemas.android.com/apk/res-auto"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">  <TextView      android:id="@+id/tv"      android:text="2323"      android:layout_width="match_parent"      android:layout_height="wrap_content" />    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/sim"        fresco:roundAsCircle="true"        android:layout_width="100dp"        android:layout_height="100dp" />  <!--<ImageView-->      <!--android:id="@+id/imager"-->      <!--android:background="@mipmap/ic_launcher"-->      <!--android:layout_weight="2"-->      <!--android:layout_width="match_parent"-->      <!--android:layout_height="wrap_content" />--></LinearLayout>
这个是item的布局

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:26.+'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    testCompile 'junit:junit:4.12'    compile 'io.reactivex:rxjava:1.2.1'    compile 'io.reactivex:rxandroid:1.2.1'    compile 'com.squareup.retrofit2:retrofit:2.1.0'    compile 'com.squareup.retrofit2:converter-gson:2.1.0'    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'    compile 'com.squareup.okhttp3:okhttp:3.1.2'    //okhttp依赖    compile 'com.squareup.okhttp3:okhttp:3.9.0'    compile 'com.squareup.okio:okio:1.13.0'    compile 'com.facebook.fresco:fresco:0.11.0'    compile 'com.jcodecraeer:xrecyclerview:1.3.2'    compile 'com.github.bumptech.glide:glide:4.0.0'}
最后在把导入的依赖写上吧算是有头有尾吧

 
原创粉丝点击