Retrofit+RxJava+Okhttp+RecycleView+MVP简单的展示数据


1.添加依赖

    compile 'com.android.support:recyclerview-v7:23.0.1'
    compile 'com.facebook.fresco:fresco:1.5.0'
    compile 'org.greenrobot:eventbus:3.1.1'
    compile 'org.greenrobot:greendao:3.2.2'
    compile 'com.jakewharton:butterknife:8.8.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'


2.布局文件(主布局)

<?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"
    tools:context="com.example.pinshop.view.MainActivity">


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


</LinearLayout>

(子布局)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:orientation="vertical"
    android:id="@+id/ll">
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:id="@+id/fresco_homepage"
        />
    <TextView
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:id="@+id/text_homepage"
        android:text="这是一件商品,对很好的商品。"/>
    <TextView
        android:layout_width="160dp"
        android:layout_height="wrap_content"
        android:textColor="#f00"
        android:text="16.00"
        android:id="@+id/price_homepage"/>


</LinearLayout>


关键的部分就在于代码的显示

net包

1.地址

public class Api {
    public static final String BASE_URL="http://apiv4.yangkeduo.com/";
    public static final String HOME_PAGE="v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255";


}

2.地址拼接(这是三个界面的地址,我们只需要用到第一个)

public interface ServiceApi {
    //首页
    @GET(Api.HOME_PAGE)
    Observable<HomePageBean> homeList();
    //详情
    @GET("goods/{id}?pdduid=3470667255")
    Observable<DetailsPageBean> detailList(@Path("id") String goods_id);
    //两条评价
    @GET("reviews/{id}?page=1&size=2&label=1&is_back=1&pdduid=3470667255")
    Observable<Evaluate> evaluate(@Path("id") String goods_id);
    //全部评价
    @GET("reviews/{id}/list?page=1&size=20&pdduid=3470667255")
    Observable<AllEvaluteBean> allList(@Path("id") String goods_id);


}


3.请求成功或者失败回调的方法

public interface OnNetListener<T> {
    public void onSuccess(T t);
    public void onFailure(Exception e);
}


4.okhttp请求+retrofit+RxJava的帮助类

public class RetrofitHelper {
    public static OkHttpClient okHttpClient;
    public static ServiceApi stringApi;


    static {
        //加载动态代码块
        initOkHttpClient();
    }


    public static void initOkHttpClient() {
        if(okHttpClient==null){
            synchronized (RetrofitHelper.class){
                if(okHttpClient==null){
                    okHttpClient = new OkHttpClient();
                }
            }
        }
    }


    //实例化stringApi对象
    public static ServiceApi serviceApi(){
        if(stringApi==null){
            synchronized (RetrofitHelper.class){
                if(stringApi==null){
                     stringApi= OnCreate(ServiceApi.class,Api.BASE_URL);
                }
            }
        }
        return stringApi;
    }


    //创建一个方法,实例化retrofit对象
    public static <T> T OnCreate(Class<T> tClass,String url){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .client(okHttpClient)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        return retrofit.create(tClass);
    }


}


这个接口需要的bean类


public class HomePageBean {

    private long ver;
    private int server_time;
    private List<GoodsListBean> goods_list;


    public long getVer() {
        return ver;
    }


    public void setVer(long ver) {
        this.ver = ver;
    }


    public int getServer_time() {
        return server_time;
    }


    public void setServer_time(int server_time) {
        this.server_time = server_time;
    }


    public List<GoodsListBean> getGoods_list() {
        return goods_list;
    }


    public void setGoods_list(List<GoodsListBean> goods_list) {
        this.goods_list = goods_list;
    }


    public static class GoodsListBean {
     


        private int normal_price;
        private int cnt;
        private String thumb_url;
        private int event_type;
        private String country;
        private String short_name;
        private GroupBean group;
        private String allowed_region;
        private int time;
        private String image_url;
        private int market_price;
        private String goods_name;
        private String hd_thumb_url;
        private int quantity;
        private boolean is_onsale;
        private int goods_id;
        private int is_app;
        private int mall_id;
        private int region_limit;


        public int getNormal_price() {
            return normal_price;
        }


        public void setNormal_price(int normal_price) {
            this.normal_price = normal_price;
        }


        public int getCnt() {
            return cnt;
        }


        public void setCnt(int cnt) {
            this.cnt = cnt;
        }


        public String getThumb_url() {
            return thumb_url;
        }


        public void setThumb_url(String thumb_url) {
            this.thumb_url = thumb_url;
        }


        public int getEvent_type() {
            return event_type;
        }


        public void setEvent_type(int event_type) {
            this.event_type = event_type;
        }


        public String getCountry() {
            return country;
        }


        public void setCountry(String country) {
            this.country = country;
        }


        public String getShort_name() {
            return short_name;
        }


        public void setShort_name(String short_name) {
            this.short_name = short_name;
        }


        public GroupBean getGroup() {
            return group;
        }


        public void setGroup(GroupBean group) {
            this.group = group;
        }


        public String getAllowed_region() {
            return allowed_region;
        }


        public void setAllowed_region(String allowed_region) {
            this.allowed_region = allowed_region;
        }


        public int getTime() {
            return time;
        }


        public void setTime(int time) {
            this.time = time;
        }


        public String getImage_url() {
            return image_url;
        }


        public void setImage_url(String image_url) {
            this.image_url = image_url;
        }


        public int getMarket_price() {
            return market_price;
        }


        public void setMarket_price(int market_price) {
            this.market_price = market_price;
        }


        public String getGoods_name() {
            return goods_name;
        }


        public void setGoods_name(String goods_name) {
            this.goods_name = goods_name;
        }


        public String getHd_thumb_url() {
            return hd_thumb_url;
        }


        public void setHd_thumb_url(String hd_thumb_url) {
            this.hd_thumb_url = hd_thumb_url;
        }


        public int getQuantity() {
            return quantity;
        }


        public void setQuantity(int quantity) {
            this.quantity = quantity;
        }


        public boolean isIs_onsale() {
            return is_onsale;
        }


        public void setIs_onsale(boolean is_onsale) {
            this.is_onsale = is_onsale;
        }


        public int getGoods_id() {
            return goods_id;
        }


        public void setGoods_id(int goods_id) {
            this.goods_id = goods_id;
        }


        public int getIs_app() {
            return is_app;
        }


        public void setIs_app(int is_app) {
            this.is_app = is_app;
        }


        public int getMall_id() {
            return mall_id;
        }


        public void setMall_id(int mall_id) {
            this.mall_id = mall_id;
        }


        public int getRegion_limit() {
            return region_limit;
        }


        public void setRegion_limit(int region_limit) {
            this.region_limit = region_limit;
        }


        public static class GroupBean {
            /**
             * customer_num : 2
             * price : 5990
             */


            private int customer_num;
            private int price;


            public int getCustomer_num() {
                return customer_num;
            }


            public void setCustomer_num(int customer_num) {
                this.customer_num = customer_num;
            }


            public int getPrice() {
                return price;
            }


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


接下来就是MVP的展示

model层

接口

public interface IHomePageModel {
    public void getHomePage(OnNetListener<HomePageBean> onNetListener);
}

实现类

public class HomePageModel implements IHomePageModel {
    @Override
    public void getHomePage(final OnNetListener<HomePageBean> onNetListener) {
        ServiceApi serviceApi = RetrofitHelper.serviceApi();
        serviceApi.homeList()
                  .subscribeOn(Schedulers.io())
                  .observeOn(AndroidSchedulers.mainThread())
                  .subscribe(new Subscriber<HomePageBean>() {
                      @Override
                      public void onCompleted() {


                      }


                      @Override
                      public void onError(Throwable e) {
                          e.getMessage();
                      }


                      @Override
                      public void onNext(HomePageBean homePageBean) {
                          onNetListener.onSuccess(homePageBean);
                      }
                  });


    }
}

p层

public class HomePagePresenter {
    public IMainActivity iMainActivity;
    public IHomePageModel iHomePageModel;


    public HomePagePresenter(IMainActivity iMainActivity) {
        this.iMainActivity = iMainActivity;
        iHomePageModel = new HomePageModel();
    }


    /**
     * 获取主界面的方法
     */
    public void getHomePage(){
        iHomePageModel.getHomePage(new OnNetListener<HomePageBean>() {
            @Override
            public void onSuccess(HomePageBean homePageBean) {
                List<HomePageBean.GoodsListBean> goods_list = homePageBean.getGoods_list();
                iMainActivity.onShowHomePage(goods_list);
            }


            @Override
            public void onFailure(Exception e) {


            }
        });
    }
}


view层

public interface IMainActivity {
    public void onShowHomePage(List<HomePageBean.GoodsListBean> homeList);
}


public class MainActivity extends AppCompatActivity implements  IMainActivity{
public RecyclerView recyclerView;
public HomePagePresenter homePagePresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.rcy_homePage);
        //注册fresco
        Fresco.initialize(this);
        homePagePresenter = new HomePagePresenter(this);
        homePagePresenter.getHomePage();


        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(gridLayoutManager);
    }


    /**
     * 展示主界面 信息
     * @param homeList
     */
    @Override
    public void onShowHomePage(List<HomePageBean.GoodsListBean> homeList) {
        HomePageAdapter homePageAdapter = new HomePageAdapter(homeList, this);
        recyclerView.setAdapter(homePageAdapter);
        homePageAdapter.setOnItemClickListener(new HomePageAdapter.OnItemClickListener() {
            @Override
            public void onItemClieck(String str) {
                Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
                intent.putExtra("key",str);
                startActivity(intent);
            }
        });
    }
}


RecycleView的适配器

public class HomePageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    public List<HomePageBean.GoodsListBean> list;
    public Context context;


    public HomePageAdapter(List<HomePageBean.GoodsListBean> list, Context context) {
        this.list = list;
        this.context = context;
    }
    //设置一个变量
    public OnItemClickListener onItemClickListener;
    //3.定义一个方法
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }
    //1.首先自定义一个接口
    public interface OnItemClickListener {
        public void onItemClieck(String str);
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.homepage_item,parent,false);


        return new MyViewHolder(view);
    }


    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        HomePageBean.GoodsListBean goodsListBean = list.get(position);
        MyViewHolder myViewHolder = (MyViewHolder) holder;
        myViewHolder.fresco.setImageURI(goodsListBean.getImage_url());
        myViewHolder.price.setText(goodsListBean.getMarket_price()+"");
        myViewHolder.title.setText(goodsListBean.getShort_name());
        final int goods_id = goodsListBean.getGoods_id();
        myViewHolder.ll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onItemClickListener.onItemClieck(goods_id+"");


            }
        });
    }


    @Override
    public int getItemCount() {
        return list.size();
    }


    class MyViewHolder extends RecyclerView.ViewHolder{
        SimpleDraweeView fresco;
        TextView title,price;
        LinearLayout ll;
        public MyViewHolder(View itemView) {
            super(itemView);
           fresco = itemView.findViewById(R.id.fresco_homepage);
            title = itemView.findViewById(R.id.text_homepage);
            price = itemView.findViewById(R.id.price_homepage);
            ll = itemView.findViewById(R.id.ll);
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值