RecyclleView使用RxJava与Retrofit网络加载Fresco

dimens:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>


activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycleView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />
</RelativeLayout>


item_layout:


<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/simple"
        fresco:roundAsCircle="true"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


IApplication:

package com.bawei.guolei.guolei2017127;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by Lenovo on 2017/12/7.
 */
public class IApplication extends Application {

    public static IGetDataBase iGetDataBase;

    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("http://api.tianapi.com")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        iGetDataBase = retrofit.create(IGetDataBase.class);

    }
}



MainActivity:

package com.bawei.guolei.guolei2017127;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.bawei.guolei.guolei2017127.presenter.MainPresenter;
import com.bawei.guolei.guolei2017127.view.MainView;

public class MainActivity extends AppCompatActivity implements MainView{

    private RecyclerView recyclerView;
    private MainPresenter presenter;
    private LinearLayoutManager manager;
    private IAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recycleView);

        presenter = new MainPresenter(this);
        presenter.get();
        manager = new LinearLayoutManager(this);
        adapter = new IAdapter(this);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(adapter);


    }

    @Override
    public void success(Bean bean) {
        adapter.addData(bean);
    }

    @Override
    public void failure(Exception e) {

    }
}


IGetDataBase:

package com.bawei.guolei.guolei2017127;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 * Created by Lenovo on 2017/12/7.
 */
public interface IGetDataBase {

    @GET("/nba")
    Observable<Bean> get(@Query("key") String key,@Query("num") String num);


}



IAdapter:

package com.bawei.guolei.guolei2017127;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Lenovo on 2017/12/7.
 */
public class IAdapter extends RecyclerView.Adapter<IAdapter.ViewHolder>{

    private Context context;
   private List<Bean.NewslistBean> list;
    public IAdapter(Context context){
        this.context=context;

    }
    public void addData(Bean bean){
        if (list==null){
            list=new ArrayList<>();
        }
        list.addAll(bean.getNewslist());
        notifyDataSetChanged();

    }

    @Override
    public IAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view=View.inflate(context,R.layout.item_layout,null);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(IAdapter.ViewHolder holder, int position) {
            holder.simple.setImageURI(list.get(position).getPicUrl());
        holder.text.setText(list.get(position).getTitle());

    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }
    static class ViewHolder extends RecyclerView.ViewHolder{
         SimpleDraweeView simple=itemView.findViewById(R.id.simple);
        TextView text=itemView.findViewById(R.id.text_view);
        public ViewHolder(View itemView) {
            super(itemView);
        }
    }
}



Bean:

package com.bawei.guolei.guolei2017127;

import java.util.List;

/**
 * Created by Lenovo on 2017/12/7.
 */
public class Bean {

    /**
     * code : 200
     * msg : success
     * newslist : [{"ctime":"2016-12-04 13:00","title":"格林:理解科尔吸食大麻 不过我从没吸过","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg","url":"http://www.51tyw.com/nba/2421.html"},{"ctime":"2016-12-04 00:00","title":"三分纪录延续!火箭队连续19场比赛命中10+三分球","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203233J3.jpg","url":"http://www.51tyw.com/nba/2417.html"},{"ctime":"2016-12-04 00:00","title":"詹姆斯谈三连败:是时候紧起来了 必须打得男人点","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203234010.jpg","url":"http://www.51tyw.com/nba/2418.html"},{"ctime":"2016-12-03 12:00","title":"骑士输赢都靠三分?那还要詹姆斯做什么?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161203/1-161203104344.jpg","url":"http://www.51tyw.com/nba/2407.html"},{"ctime":"2016-12-03 00:00","title":"公牛vs骑士直播看点:詹伟兄弟对决","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202221205.jpg","url":"http://www.51tyw.com/nba/2395.html"},{"ctime":"2016-12-02 22:00","title":"火箭和勇士联手创NBA三分纪录","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202214212.jpg","url":"http://www.51tyw.com/nba/2392.html"},{"ctime":"2016-12-02 22:00","title":"巴克利:勇士打得像女式篮球,太软了!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-161202215032.jpg","url":"http://www.51tyw.com/nba/2394.html"},{"ctime":"2016-12-02 20:00","title":"詹姆斯完成月最佳球员4连霸的壮举!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161202/1-1612021PI0.jpg","url":"http://www.51tyw.com/nba/2388.html"},{"ctime":"2016-12-01 00:00","title":"威少再下三双战书!詹皇会不会先认怂?","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161128/1-16112Q13251.jpg","url":"http://www.51tyw.com/nba/2374.html"},{"ctime":"2016-12-01 00:00","title":"骑士这样的防守想夺冠?也许卫冕只是空谈!","description":"NBA新闻","picUrl":"http://www.51tyw.com/uploads/allimg/161130/1-161130222229.jpg","url":"http://www.51tyw.com/nba/2375.html"}]
     */

    private int code;
    private String msg;
    private List<NewslistBean> newslist;

    public int getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

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

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {
        /**
         * ctime : 2016-12-04 13:00
         * title : 格林:理解科尔吸食大麻 不过我从没吸过
         * description : NBA新闻
         * picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg
         * url : http://www.51tyw.com/nba/2421.html
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

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

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}


M层:

ModelCallBack :

package com.bawei.guolei.guolei2017127.model;

import com.bawei.guolei.guolei2017127.Bean;

/**
 * Created by Lenovo on 2017/12/7.
 */
public interface ModelCallBack {
    public void success(Bean bean);
    public void failure(Exception e);
}


MainModel:

package com.bawei.guolei.guolei2017127.model;

import com.bawei.guolei.guolei2017127.Bean;
import com.bawei.guolei.guolei2017127.IApplication;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

/**
 * Created by Lenovo on 2017/12/7.
 */
public class MainModel {
    public void getData(final ModelCallBack callBack){
        IApplication.iGetDataBase.get("71e58b5b2f930eaf1f937407acde08fe","10")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Bean>() {
                    @Override
                    public void accept(Bean bean) throws Exception {
                        callBack.success(bean);
                    }
                });





    }
}


P层:

MainPresenter:

package com.bawei.guolei.guolei2017127.presenter;

import com.bawei.guolei.guolei2017127.Bean;
import com.bawei.guolei.guolei2017127.model.MainModel;
import com.bawei.guolei.guolei2017127.model.ModelCallBack;
import com.bawei.guolei.guolei2017127.view.MainView;

/**
 * Created by Lenovo on 2017/12/7.
 */
public class MainPresenter {

    private MainView mainView;
    private MainModel mainModel;
    public MainPresenter(MainView mainView){
        this.mainView=mainView;
        this.mainModel=new MainModel();

    }
    public void get(){
        mainModel.getData(new ModelCallBack() {
            @Override
            public void success(Bean bean) {
                if (mainView!=null){
                    mainView.success(bean);
                }
            }

            @Override
            public void failure(Exception e) {
                if (mainView!=null){
                    mainView.failure(e);
                }

            }
        });

    }
}



V层:

MainView:

package com.bawei.guolei.guolei2017127.view;

import com.bawei.guolei.guolei2017127.Bean;

/**
 * Created by Lenovo on 2017/12/7.
 */
public interface MainView {
    public void success(Bean bean);
    public void failure(Exception e);
}


依赖:

  compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.7'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
    compile 'com.facebook.fresco:fresco:0.14.1'
    compile 'com.jakewharton:butterknife:7.0.0'


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值