MVP+retrofit+rxjava+recyclerview+Fresco请求网络数据

    清单文件


 
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.com.rikao4_19">
	//权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <application
        android:allowBackup="true"
        android:name=".App"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

	依赖
 
 
 
 
 compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.okhttp3:okhttp:3.10.0'
   // compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    compile 'io.reactivex.rxjava2:rxjava:2.1.7'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

    compile 'com.squareup.retrofit2:converter-gson:2.4.0'
    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
// 其他依赖  Fresco加载图片框架
    compile 'com.facebook.fresco:fresco:0.12.0'
    compile 'com.facebook.fresco:animated-gif:0.12.0'
    compile 'org.greenrobot:eventbus:3.0.0'

	工具类
 
 
public class HttpUtils {
    //定义单例
    private static volatile HttpUtils instance;
    private final Retrofit retrofit;

    //无参构造
    private HttpUtils(){
       //创建一个retrofit对象
        String url="https://www.zhaoapi.cn/";
        retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

    }
   
    public static HttpUtils getInstance(){
        //判断instance是否为空
        if(instance==null){
            //为本工具类加同步锁
            synchronized (HttpUtils.class){
                //再次判断
                if(null==instance){
                    instance=new HttpUtils();
                }
            }
        }
        return instance;
    }

    //得到apiservice    public ApiService getApiService(){
        //retrofit这个对象使用create方法创建出接口对象,
        // 通过动态代理,将接口里定义的方法,和传进的值,获取下来,进行数据的请求
        return retrofit.create(ApiService.class);
    }

}

	APIservice接口
 
 
 
 
public interface ApiService<T> {
    //https://www.zhaoapi.cn/product/getProducts?pscid=1
    @GET("product/getProducts")
    Flowable<MeassageBean<List<JavaBean>>> getService(@Query("pscid") String pscid);
}
 
   
 初始化fresco 
 
 
 
 
 
public class App extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

	model层
 
 
 
 
public class DataModel {
    private final DataPresenter presenter;

    //提供构造方法 传入p层接口得对象
    public DataModel(DataPresenter presenter){
        this.presenter=presenter;
    }

    //定义请求数据方法
    public void getData(String pscid){
        //调用工具类得到apiservice,拿到url和参数
        ApiService apiService = HttpUtils.getInstance().getApiService();
        //调用apiservice方法
        Flowable flowable = apiService.getService(pscid);
        //调用p层请求成功方法
        presenter.success(flowable);
    }
}

		p层接口
 
 
 
 
public interface DataPresenter {
    //定义个成功方法 参数是flowable对象
    void success(Flowable<MeassageBean<List<JavaBean>>> flowable);

}

		p层接口实现类
 
 
 
 
public class MyDataPresenter implements DataPresenter{

    private DataView dataView;
    //加载视图
    public void attachView(DataView dataView){
        this.dataView=dataView;

    }
    //销毁视图
    public void detachView(){
        if(dataView!=null){
            dataView=null;
        }
    }
    //定义方法调用m层请求数据方法,参数是cid

    public void getMdata(String pscid){
        //创建m层对象
        DataModel dataModel=new DataModel(this);
        dataModel.getData(pscid);
    }

    @Override
    public void success(final Flowable<MeassageBean<List<JavaBean>>> flowable) {
        //切换线程
        flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                //回调到主线程
                .subscribe(new DisposableSubscriber<MeassageBean<List<JavaBean>>>() {
                   //成功把数据传给v
                    @Override
                    public void onNext(MeassageBean<List<JavaBean>> listMeassageBean) {
                        //调用v请求数据方法
                        dataView.success(listMeassageBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                            dataView.error(t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }


}

	
	v层接口
 
 
 
 
public interface DataView<T> {
    //定义成功失败方法
    void success(MeassageBean<List<JavaBean>> flowable);
    void error(Throwable t);
}

	
	Mainactivity代码
 
 
 
 
 
 
public class MainActivity extends AppCompatActivity implements DataView<MeassageBean<List<JavaBean>>>{

    private MyDataPresenter presenter;
    private RecyclerView re_view;
    private List<JavaBean> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        re_view = findViewById(R.id.re_view);

        //创建p层对象
        presenter = new MyDataPresenter();
        //加载视图
        presenter.attachView(this);
        presenter.getMdata("1");

    }

    @Override
    public void success(MeassageBean<List<JavaBean>> flowable) {
      //  Log.d("--", "success: "+flowable.getData().size());
      list = flowable.getData();
        LinearLayoutManager manager=new LinearLayoutManager(MainActivity.this);
        re_view.setLayoutManager(manager);
        //设置适配器
        MyAdapter adapter=new MyAdapter(MainActivity.this,list);
        re_view.setAdapter(adapter);

    }

    @Override
    public void error(Throwable t) {
        Log.d("----", "error: "+t.getMessage());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //判断p对象是否为空
        if(presenter!=null){
            presenter.detachView();
        }
    }
}

		
	MeassageBean类代码
 
 
 
 
public class MeassageBean<T> {
    private String msg;
    private String code;
    private T data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

		Bean类
 
 
 
 
 
 
public class JavaBean {
    private double bargainPrice;
    private String createtime;
    private String detailUrl;
    private String images;
    private int itemtype;
    private int pid;
    private double price;
    private int pscid;
    private int salenum;
    private int sellerid;
    private String subhead;
    private String title;

    public double getBargainPrice() {
        return bargainPrice;
    }

    public void setBargainPrice(double bargainPrice) {
        this.bargainPrice = bargainPrice;
    }

    public String getCreatetime() {
        return createtime;
    }

    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }

    public String getDetailUrl() {
        return detailUrl;
    }

    public void setDetailUrl(String detailUrl) {
        this.detailUrl = detailUrl;
    }

    public String getImages() {
        return images;
    }

    public void setImages(String images) {
        this.images = images;
    }

    public int getItemtype() {
        return itemtype;
    }

    public void setItemtype(int itemtype) {
        this.itemtype = itemtype;
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getPscid() {
        return pscid;
    }

    public void setPscid(int pscid) {
        this.pscid = pscid;
    }

    public int getSalenum() {
        return salenum;
    }

    public void setSalenum(int salenum) {
        this.salenum = salenum;
    }

    public int getSellerid() {
        return sellerid;
    }

    public void setSellerid(int sellerid) {
        this.sellerid = sellerid;
    }

    public String getSubhead() {
        return subhead;
    }

    public void setSubhead(String subhead) {
        this.subhead = subhead;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

猜你喜欢

转载自blog.csdn.net/lucky_7777777/article/details/80005383
今日推荐