MVP+Retrofit封装实现详情页面

来源:互联网 发布:淘宝怎么抢现货了快点 编辑:程序博客网 时间:2024/05/20 02:25

//依赖

//图片无限轮播compile 'com.youth.banner:banner:1.4.9'//图片加载依赖compile 'org.webjars.npm:react-imageloader:2.1.0'compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'compile 'com.github.bumptech.glide:glide:3.7.0'// frescocompile 'com.facebook.fresco:fresco:0.12.0'// xrecyclerview的依赖compile 'com.jcodecraeer:xrecyclerview:1.3.2'// Retrofitcompile 'com.squareup.retrofit2:retrofit:2.0.1'// rxjava+rxandroid+retrofit2+okhttpcompile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'compile 'com.squareup.retrofit2:converter-gson:2.0.1'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'//gson解析数据compile 'com.google.code.gson:gson:2.6.2'

//权限

<uses-permission android:name="android.permission.INTERNET" />

//utils工具了  

Bitmap的封装
public class BitmapUtil {    String uri;    ImageView ls_iv;    public void getpic(String uri,ImageView ls_iv){        this.uri=uri;        this.ls_iv=ls_iv;        new Thread(runnable).start();    }    Handler handler=new Handler(){        public void handleMessage(Message msg) {            ls_iv.setImageBitmap((Bitmap) msg.obj);        };    };    Runnable runnable=new Runnable() {        @Override        public void run() {            // TODO Auto-generated method stub            try {                URL url = new URL(uri);                HttpURLConnection connection=(HttpURLConnection) url.openConnection();                connection.setConnectTimeout(5000);                connection.setReadTimeout(5000);                InputStream is = connection.getInputStream();                Bitmap bitmap= BitmapFactory.decodeStream(is);                Message msg = new Message();                msg.obj=bitmap;                msg.what=0;                handler.sendMessage(msg);            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    };}
//ImageLoader的封装的工具类
public class BnImageLoader extends ImageLoader {    @Override    public void displayImage(Context context, Object path, ImageView imageView) {        Uri uri = Uri.parse((String) path);        imageView.setImageURI(uri);    }    public ImageView createImageView(Context context) {        //使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView        SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context);        return simpleDraweeView;    }}
//Retrofit封装的工具类
public class RetrofitManager {    private Retrofit mRetrofit;    private String baseUrl;    OkHttpClient client;//有关拦截器    private static RetrofitManager mRetrofitManager;    private RetrofitManager(){}    private RetrofitManager(String baseUrl, OkHttpClient client){        this.baseUrl=baseUrl;        this.client=client;//有关拦截器        initRetrofit();    }    public static synchronized RetrofitManager getInstance(String baseUrl,OkHttpClient client){//有关拦截器        if (mRetrofitManager == null){            mRetrofitManager = new RetrofitManager(baseUrl,client);        }        return mRetrofitManager;    }    private void initRetrofit() {        mRetrofit = new Retrofit.Builder()                .baseUrl(baseUrl)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .client(client)//有关拦截器                .build();    }    public <T> T setCreate(Class<T> reqServer){        return mRetrofit.create(reqServer);    }}
//myapp
public class MyApp extends Application {    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}
android:name="utils.MyApp"

//首页
public interface SYUrl {    //首页    @GET("v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255")    Observable<Sy_bean> getSy();}
//详情页
public interface BNUrl {    //详情页    @GET("v5/goods/{goods_id}?pdduid=3470667255")    Observable<Bn_Bean> getPj(@Path("goods_id") String goods_id);}
//评价
public interface PJUrl {    //评价    @GET("reviews/{id}?page=1&size=10&label=1&is_back=1&pdduid=3470667255")    Observable<Pj_Bean> getPj(@Path("id") String id);}
Been类
public class Sy_bean {    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 : 13900             */            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;            }        }    }}

View层接口
首页View层接口
public interface ISYDataView {    //首页View层接口    public void showSYData(List<Sy_bean.GoodsListBean> sylist);}
//Model层的接口
public interface ISYDataModel {    //首页    public void getSYData(Observer observer);}
//首页继承接口
public class SYDataModel implements ISYDataModel {    //首页    @Override    public void getSYData(Observer observer) {        OkHttpClient client=new OkHttpClient.Builder().build();        RetrofitManager.getInstance("http://apiv3.yangkeduo.com/",client)                .setCreate(SYUrl.class)                .getSy()                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(observer);    }}
//首页P层
public class SYPresenter {    //首页    SYDataModel model;    ISYDataView view;    List<Sy_bean.GoodsListBean> sylist=new ArrayList<>();    public SYPresenter(ISYDataView view) {        this.view = view;        model=new SYDataModel();    }    public void spData(){        model.getSYData(new Observer<Sy_bean>(){            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                Log.i("111111p","onError");            }            @Override            public void onNext(Sy_bean sy_bean) {                sylist.addAll(sy_bean.getGoods_list());                view.showSYData(sylist);            }        });    }}
//首页MainActivity继承接口
public class XiangActivity extends AppCompatActivity implements ISYDataView{    SYAdapter syAdapter;    private RecyclerView mRv;    List<Sy_bean.GoodsListBean> sylist=new ArrayList<>();    SYPresenter syPresenter;    String id;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_xiang);        initView();        syPresenter=new SYPresenter(this);        showSYData(sylist);        syPresenter.spData();    }    private void initView() {        mRv = (RecyclerView) findViewById(R.id.rv);    }    @Override    public void showSYData(final List<Sy_bean.GoodsListBean> sylist) {        GridLayoutManager manager=new GridLayoutManager(this,2);        mRv.setLayoutManager(manager);        syAdapter=new SYAdapter(this,sylist);        mRv.setAdapter(syAdapter);        syAdapter.setOnItemClick(new SYAdapter.OnItemClickListener() {            @Override            public void OnItemClick(View view, int position, String name, String pic, String price) {                id=sylist.get(position).getGoods_id()+"";                Intent intent = new Intent(XiangActivity.this,DetailsActivity.class);                intent.putExtra("id",id);                intent.putExtra("name",name);                intent.putExtra("pic",pic);                intent.putExtra("price",price);                startActivity(intent);            }        });    }}
activity_xiang.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    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="clas.view.XiangActivity">    <TextView        android:text="新品"        android:id="@+id/tv"        android:textSize="25sp"        android:gravity="center"        android:textColor="@android:color/holo_red_dark"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <android.support.v7.widget.RecyclerView        android:id="@+id/rv"        android:layout_width="match_parent"        android:layout_below="@+id/tv"        android:layout_height="match_parent"        >    </android.support.v7.widget.RecyclerView></RelativeLayout>
//首页的适配器
public class SYAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    Context context;    List<Sy_bean.GoodsListBean> sylist;    OnItemClickListener listener;    public SYAdapter(Context context, List<Sy_bean.GoodsListBean> sylist) {        this.context = context;        this.sylist = sylist;    }    public interface OnItemClickListener {        public void OnItemClick(View view, int position, String name, String pic, String price);    }    public void setOnItemClick(OnItemClickListener listener) {        this.listener = listener;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.sy_item, null);        return new SYHolder(view);    }    @Override    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {        ((SYHolder) holder).sdv.setImageURI(sylist.get(position).getImage_url());        ((SYHolder) holder).sy_tv.setText(sylist.get(position).getGoods_name());        ((SYHolder) holder).sy_price.setText("" + sylist.get(position).getGroup().getPrice());        holder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (listener != null) {                    listener.OnItemClick(view, position, ((SYHolder) holder).sy_tv.getText().toString(), sylist.get(position).getImage_url(), ((SYHolder) holder).sy_price.getText().toString());                }            }        });    }    @Override    public int getItemCount() {        return sylist != null ? sylist.size() : 0;    }    class SYHolder extends RecyclerView.ViewHolder {        SimpleDraweeView sdv;        TextView sy_tv;        TextView sy_price;        public SYHolder(View itemView) {            super(itemView);            sdv = itemView.findViewById(R.id.sdv);            sy_tv = itemView.findViewById(R.id.sy_tv);            sy_price = itemView.findViewById(R.id.sy_price);        }    }}
sy_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_marginLeft="35dp"    android:layout_height="match_parent">    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/sdv"        android:layout_marginLeft="30dp"        android:layout_width="200dp"        android:layout_height="200dp" />    <TextView        android:id="@+id/sy_price"        android:layout_marginLeft="30dp"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/sy_tv"        android:layout_marginLeft="30dp"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

Been类
public class Bn_Bean {    private String goods_sn;    private int goods_id;    private int cat_id;    private int mall_id;    private String goods_name;    private int is_app;    private int event_type;    private String goods_desc;    private int market_price;    private int is_onsale;    private String thumb_url;    private String hd_thumb_url;    private String allowed_region;    private String country;    private String warehouse;    private int goods_type;    private String image_url;    private int is_refundable;    private int quick_refund;    private int is_pre_sale;    private int pre_sale_time;    private String share_desc;    private int rv_image;    private int rv;    private int gpv;    private String skip_goods;    private int shipment_limit_second;    private int sales;    private int is_mall_rec;    private int min_on_sale_group_price;    private int max_on_sale_group_price;    private int min_on_sale_normal_price;    private int max_on_sale_normal_price;    private int min_group_price;    private int max_group_price;    private int max_normal_price;    private int min_normal_price;    private int tag;    private int cost_template_id;    private int show_rec;    private int is_folt;    private int is_installment;    private int app_new;    private String red_envelopes;    private String cost_province_codes;    private int server_time;    private int is_home_delivery;    private int second_hand;    private int cat_id_1;    private int cat_id_2;    private int cat_id_3;    private List<SkuBean> sku;    private List<GalleryBean> gallery;    private List<GroupBean> group;    private List<ServicePromiseBean> service_promise;    private List<?> images;    public String getGoods_sn() {        return goods_sn;    }    public void setGoods_sn(String goods_sn) {        this.goods_sn = goods_sn;    }    public int getGoods_id() {        return goods_id;    }    public void setGoods_id(int goods_id) {        this.goods_id = goods_id;    }    public int getCat_id() {        return cat_id;    }    public void setCat_id(int cat_id) {        this.cat_id = cat_id;    }    public int getMall_id() {        return mall_id;    }    public void setMall_id(int mall_id) {        this.mall_id = mall_id;    }    public String getGoods_name() {        return goods_name;    }    public void setGoods_name(String goods_name) {        this.goods_name = goods_name;    }    public int getIs_app() {        return is_app;    }    public void setIs_app(int is_app) {        this.is_app = is_app;    }    public int getEvent_type() {        return event_type;    }    public void setEvent_type(int event_type) {        this.event_type = event_type;    }    public String getGoods_desc() {        return goods_desc;    }    public void setGoods_desc(String goods_desc) {        this.goods_desc = goods_desc;    }    public int getMarket_price() {        return market_price;    }    public void setMarket_price(int market_price) {        this.market_price = market_price;    }    public int getIs_onsale() {        return is_onsale;    }    public void setIs_onsale(int is_onsale) {        this.is_onsale = is_onsale;    }    public String getThumb_url() {        return thumb_url;    }    public void setThumb_url(String thumb_url) {        this.thumb_url = thumb_url;    }    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 String getAllowed_region() {        return allowed_region;    }    public void setAllowed_region(String allowed_region) {        this.allowed_region = allowed_region;    }    public String getCountry() {        return country;    }    public void setCountry(String country) {        this.country = country;    }    public String getWarehouse() {        return warehouse;    }    public void setWarehouse(String warehouse) {        this.warehouse = warehouse;    }    public int getGoods_type() {        return goods_type;    }    public void setGoods_type(int goods_type) {        this.goods_type = goods_type;    }    public String getImage_url() {        return image_url;    }    public void setImage_url(String image_url) {        this.image_url = image_url;    }    public int getIs_refundable() {        return is_refundable;    }    public void setIs_refundable(int is_refundable) {        this.is_refundable = is_refundable;    }    public int getQuick_refund() {        return quick_refund;    }    public void setQuick_refund(int quick_refund) {        this.quick_refund = quick_refund;    }    public int getIs_pre_sale() {        return is_pre_sale;    }    public void setIs_pre_sale(int is_pre_sale) {        this.is_pre_sale = is_pre_sale;    }    public int getPre_sale_time() {        return pre_sale_time;    }    public void setPre_sale_time(int pre_sale_time) {        this.pre_sale_time = pre_sale_time;    }    public String getShare_desc() {        return share_desc;    }    public void setShare_desc(String share_desc) {        this.share_desc = share_desc;    }    public int getRv_image() {        return rv_image;    }    public void setRv_image(int rv_image) {        this.rv_image = rv_image;    }    public int getRv() {        return rv;    }    public void setRv(int rv) {        this.rv = rv;    }    public int getGpv() {        return gpv;    }    public void setGpv(int gpv) {        this.gpv = gpv;    }    public String getSkip_goods() {        return skip_goods;    }    public void setSkip_goods(String skip_goods) {        this.skip_goods = skip_goods;    }    public int getShipment_limit_second() {        return shipment_limit_second;    }    public void setShipment_limit_second(int shipment_limit_second) {        this.shipment_limit_second = shipment_limit_second;    }    public int getSales() {        return sales;    }    public void setSales(int sales) {        this.sales = sales;    }    public int getIs_mall_rec() {        return is_mall_rec;    }    public void setIs_mall_rec(int is_mall_rec) {        this.is_mall_rec = is_mall_rec;    }    public int getMin_on_sale_group_price() {        return min_on_sale_group_price;    }    public void setMin_on_sale_group_price(int min_on_sale_group_price) {        this.min_on_sale_group_price = min_on_sale_group_price;    }    public int getMax_on_sale_group_price() {        return max_on_sale_group_price;    }    public void setMax_on_sale_group_price(int max_on_sale_group_price) {        this.max_on_sale_group_price = max_on_sale_group_price;    }    public int getMin_on_sale_normal_price() {        return min_on_sale_normal_price;    }    public void setMin_on_sale_normal_price(int min_on_sale_normal_price) {        this.min_on_sale_normal_price = min_on_sale_normal_price;    }    public int getMax_on_sale_normal_price() {        return max_on_sale_normal_price;    }    public void setMax_on_sale_normal_price(int max_on_sale_normal_price) {        this.max_on_sale_normal_price = max_on_sale_normal_price;    }    public int getMin_group_price() {        return min_group_price;    }    public void setMin_group_price(int min_group_price) {        this.min_group_price = min_group_price;    }    public int getMax_group_price() {        return max_group_price;    }    public void setMax_group_price(int max_group_price) {        this.max_group_price = max_group_price;    }    public int getMax_normal_price() {        return max_normal_price;    }    public void setMax_normal_price(int max_normal_price) {        this.max_normal_price = max_normal_price;    }    public int getMin_normal_price() {        return min_normal_price;    }    public void setMin_normal_price(int min_normal_price) {        this.min_normal_price = min_normal_price;    }    public int getTag() {        return tag;    }    public void setTag(int tag) {        this.tag = tag;    }    public int getCost_template_id() {        return cost_template_id;    }    public void setCost_template_id(int cost_template_id) {        this.cost_template_id = cost_template_id;    }    public int getShow_rec() {        return show_rec;    }    public void setShow_rec(int show_rec) {        this.show_rec = show_rec;    }    public int getIs_folt() {        return is_folt;    }    public void setIs_folt(int is_folt) {        this.is_folt = is_folt;    }    public int getIs_installment() {        return is_installment;    }    public void setIs_installment(int is_installment) {        this.is_installment = is_installment;    }    public int getApp_new() {        return app_new;    }    public void setApp_new(int app_new) {        this.app_new = app_new;    }    public String getRed_envelopes() {        return red_envelopes;    }    public void setRed_envelopes(String red_envelopes) {        this.red_envelopes = red_envelopes;    }    public String getCost_province_codes() {        return cost_province_codes;    }    public void setCost_province_codes(String cost_province_codes) {        this.cost_province_codes = cost_province_codes;    }    public int getServer_time() {        return server_time;    }    public void setServer_time(int server_time) {        this.server_time = server_time;    }    public int getIs_home_delivery() {        return is_home_delivery;    }    public void setIs_home_delivery(int is_home_delivery) {        this.is_home_delivery = is_home_delivery;    }    public int getSecond_hand() {        return second_hand;    }    public void setSecond_hand(int second_hand) {        this.second_hand = second_hand;    }    public int getCat_id_1() {        return cat_id_1;    }    public void setCat_id_1(int cat_id_1) {        this.cat_id_1 = cat_id_1;    }    public int getCat_id_2() {        return cat_id_2;    }    public void setCat_id_2(int cat_id_2) {        this.cat_id_2 = cat_id_2;    }    public int getCat_id_3() {        return cat_id_3;    }    public void setCat_id_3(int cat_id_3) {        this.cat_id_3 = cat_id_3;    }    public List<SkuBean> getSku() {        return sku;    }    public void setSku(List<SkuBean> sku) {        this.sku = sku;    }    public List<GalleryBean> getGallery() {        return gallery;    }    public void setGallery(List<GalleryBean> gallery) {        this.gallery = gallery;    }    public List<GroupBean> getGroup() {        return group;    }    public void setGroup(List<GroupBean> group) {        this.group = group;    }    public List<ServicePromiseBean> getService_promise() {        return service_promise;    }    public void setService_promise(List<ServicePromiseBean> service_promise) {        this.service_promise = service_promise;    }    public List<?> getImages() {        return images;    }    public void setImages(List<?> images) {        this.images = images;    }    public static class SkuBean {        private long sku_id;        private int goods_id;        private String thumb_url;        private int quantity;        private int limit_quantity;        private int sold_quantity;        private int init_quantity;        private int is_onsale;        private String spec;        private int normal_price;        private int group_price;        private int price;        private int market_price;        private int weight;        private List<SpecsBean> specs;        public long getSku_id() {            return sku_id;        }        public void setSku_id(long sku_id) {            this.sku_id = sku_id;        }        public int getGoods_id() {            return goods_id;        }        public void setGoods_id(int goods_id) {            this.goods_id = goods_id;        }        public String getThumb_url() {            return thumb_url;        }        public void setThumb_url(String thumb_url) {            this.thumb_url = thumb_url;        }        public int getQuantity() {            return quantity;        }        public void setQuantity(int quantity) {            this.quantity = quantity;        }        public int getLimit_quantity() {            return limit_quantity;        }        public void setLimit_quantity(int limit_quantity) {            this.limit_quantity = limit_quantity;        }        public int getSold_quantity() {            return sold_quantity;        }        public void setSold_quantity(int sold_quantity) {            this.sold_quantity = sold_quantity;        }        public int getInit_quantity() {            return init_quantity;        }        public void setInit_quantity(int init_quantity) {            this.init_quantity = init_quantity;        }        public int getIs_onsale() {            return is_onsale;        }        public void setIs_onsale(int is_onsale) {            this.is_onsale = is_onsale;        }        public String getSpec() {            return spec;        }        public void setSpec(String spec) {            this.spec = spec;        }        public int getNormal_price() {            return normal_price;        }        public void setNormal_price(int normal_price) {            this.normal_price = normal_price;        }        public int getGroup_price() {            return group_price;        }        public void setGroup_price(int group_price) {            this.group_price = group_price;        }        public int getPrice() {            return price;        }        public void setPrice(int price) {            this.price = price;        }        public int getMarket_price() {            return market_price;        }        public void setMarket_price(int market_price) {            this.market_price = market_price;        }        public int getWeight() {            return weight;        }        public void setWeight(int weight) {            this.weight = weight;        }        public List<SpecsBean> getSpecs() {            return specs;        }        public void setSpecs(List<SpecsBean> specs) {            this.specs = specs;        }        public static class SpecsBean {            /**             * spec_key : 颜色             * spec_value : 黑色             */            private String spec_key;            private String spec_value;            public String getSpec_key() {                return spec_key;            }            public void setSpec_key(String spec_key) {                this.spec_key = spec_key;            }            public String getSpec_value() {                return spec_value;            }            public void setSpec_value(String spec_value) {                this.spec_value = spec_value;            }        }    }    public static class GalleryBean {        /**         * id : 3775324922         * goods_id : 202517471         * url : http://omsproductionimg.yangkeduo.com/images/2017-11-16/d24b7f10f62a9ff513e101b3e1637a4a.jpeg         * width : 750         * height : 865         * priority : 24         * type : 2         */        private long id;        private int goods_id;        private String url;        private int width;        private int height;        private int priority;        private int type;        public long getId() {            return id;        }        public void setId(long id) {            this.id = id;        }        public int getGoods_id() {            return goods_id;        }        public void setGoods_id(int goods_id) {            this.goods_id = goods_id;        }        public String getUrl() {            return url;        }        public void setUrl(String url) {            this.url = url;        }        public int getWidth() {            return width;        }        public void setWidth(int width) {            this.width = width;        }        public int getHeight() {            return height;        }        public void setHeight(int height) {            this.height = height;        }        public int getPriority() {            return priority;        }        public void setPriority(int priority) {            this.priority = priority;        }        public int getType() {            return type;        }        public void setType(int type) {            this.type = type;        }    }    public static class GroupBean {        /**         * id : 365745480         * group_id : 365745480         * goods_id : 202517471         * price : 0         * customer_num : 1         * start_time : 1451577600         * end_time : 2082729600         * duration : 86400         * buy_limit : 999999         * order_limit : 999999         * is_open : 1         */        private int id;        private int group_id;        private int goods_id;        private int price;        private int customer_num;        private int start_time;        private int end_time;        private int duration;        private int buy_limit;        private int order_limit;        private int is_open;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public int getGroup_id() {            return group_id;        }        public void setGroup_id(int group_id) {            this.group_id = group_id;        }        public int getGoods_id() {            return goods_id;        }        public void setGoods_id(int goods_id) {            this.goods_id = goods_id;        }        public int getPrice() {            return price;        }        public void setPrice(int price) {            this.price = price;        }        public int getCustomer_num() {            return customer_num;        }        public void setCustomer_num(int customer_num) {            this.customer_num = customer_num;        }        public int getStart_time() {            return start_time;        }        public void setStart_time(int start_time) {            this.start_time = start_time;        }        public int getEnd_time() {            return end_time;        }        public void setEnd_time(int end_time) {            this.end_time = end_time;        }        public int getDuration() {            return duration;        }        public void setDuration(int duration) {            this.duration = duration;        }        public int getBuy_limit() {            return buy_limit;        }        public void setBuy_limit(int buy_limit) {            this.buy_limit = buy_limit;        }        public int getOrder_limit() {            return order_limit;        }        public void setOrder_limit(int order_limit) {            this.order_limit = order_limit;        }        public int getIs_open() {            return is_open;        }        public void setIs_open(int is_open) {            this.is_open = is_open;        }    }    public static class ServicePromiseBean {        /**         * type : 全场包邮         * desc : 所有商品均无条件包邮         */        private String type;        private String desc;        public String getType() {            return type;        }        public void setType(String type) {            this.type = type;        }        public String getDesc() {            return desc;        }        public void setDesc(String desc) {            this.desc = desc;        }    }}

View层接口
//详情View层接口
public interface IBNDataView {    //详情View层接口    public void bnShowData(List<Bn_Bean.SkuBean> bnlist);    public String getBnId();}
//Model层的接口
public interface IBNDataModel {    //详情页    public void getBNData(String goods_id, Observer observer);}
//详情页面继承接口
public class BNDataModel implements IBNDataModel {    //详情    @Override    public void getBNData(String goods_id,Observer observer) {        OkHttpClient client=new OkHttpClient.Builder().build();        RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client)                .setCreate(BNUrl.class)                .getPj(goods_id)                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(observer);    }}

//详情页P层
public class BNPresenter {//详情页面    BNDataModel model;    IBNDataView view;    List<Bn_Bean.SkuBean> bnlist=new ArrayList<>();    public BNPresenter(IBNDataView view) {        this.view = view;        model=new BNDataModel();    }    public void ppData(){        String goods_id=view.getBnId();        model.getBNData(goods_id,new Observer<Bn_Bean>(){            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                Log.i("111111banner","onError......");            }            @Override            public void onNext(Bn_Bean bn_bean) {                bnlist.addAll(bn_bean.getSku());                view.bnShowData(bnlist);                Log.i("111111banner","onNext"+bnlist);            }        });    }}
//轮播页面继承接口
public class DetailsActivity extends AppCompatActivity implements IPJDataView,IBNDataView {    private Banner mbanner;    private TextView mPriceName, more;    private ListView d_pj_lv;    PJPresenter pjPresenter;    String name;    List<Pj_Bean.DataBean> pjlist = new ArrayList<>();    List<Bn_Bean.SkuBean> bnlist = new ArrayList<>();    String pic;    String price;    String id;    PJAdapter pjAdapter;    BNPresenter bnPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_details);        initView();        Intent intent = getIntent();        name = intent.getStringExtra("name");        pic = intent.getStringExtra("pic");        price = intent.getStringExtra("price");        id = intent.getStringExtra("id");        initData();        pjPresenter = new PJPresenter(this);        pjShowData(pjlist);        pjPresenter.ppData();        bnPresenter = new BNPresenter(this);        bnShowData(bnlist);        bnPresenter.ppData();        more.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent2 = new Intent(DetailsActivity.this, PingJiaActivity.class);                intent2.putExtra("id", id);                startActivity(intent2);            }        });    }    private void initData() {        mPriceName.setText(price + "\r\n" + name);    }    private void initView() {        mbanner = (Banner) findViewById(R.id.mbanner);        mPriceName = (TextView) findViewById(R.id.price_name);        d_pj_lv = (ListView) findViewById(R.id.d_pj_lv);        more = findViewById(R.id.more);    }    @Override    public void pjShowData(List<Pj_Bean.DataBean> pjlist) {        pjAdapter = new PJAdapter(this, pjlist);        d_pj_lv.setAdapter(pjAdapter);    }    @Override    public String getId() {        return id;    }    @Override    public void bnShowData(List<Bn_Bean.SkuBean> bnlist) {        ArrayList<String> pic = new ArrayList<>();        for (int i = 0; i < bnlist.size(); i++) {            pic.add(bnlist.get(i).getThumb_url());            Log.i("111111b", "" + bnlist.get(i).getThumb_url());        }        mbanner.setImageLoader(new BnImageLoader());        mbanner.setImages(pic);        mbanner.start();    }    @Override    public String getBnId() {        return id;    }}
activity_details.xml

<?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="clas.view.DetailsActivity">    <com.youth.banner.Banner        android:id="@+id/mbanner"        android:layout_width="match_parent"        android:layout_height="350dp" />    <TextView        android:id="@+id/price_name"        android:layout_width="match_parent"        android:textSize="15sp"        android:layout_height="wrap_content" />    <LinearLayout        android:layout_width="match_parent"        android:background="@color/gainsboro"        android:layout_height="12dp"></LinearLayout>    <LinearLayout        android:id="@+id/d_ll"        android:orientation="horizontal"        android:layout_width="match_parent"        android:gravity="center_vertical"        android:layout_height="wrap_content">        <TextView            android:text="商品评价"            android:textSize="20sp"            android:layout_marginLeft="20dp"            android:textColor="@android:color/black"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            />        <TextView            android:id="@+id/more"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="查看全部>"            android:gravity="center"            android:layout_weight="1"            android:layout_marginLeft="200dp"            />    </LinearLayout>    <ListView        android:id="@+id/d_pj_lv"        android:layout_marginLeft="20dp"        android:layout_width="match_parent"        android:layout_height="465dp"></ListView>    <Button        android:id="@+id/gwc"        android:layout_width="match_parent"        android:layout_height="60dp"        android:text="加入购物车"        android:textSize="20sp"        android:background="@color/crimson"        /></LinearLayout>
//轮播详情页的适配器public class PJAdapter extends BaseAdapter {    Context context;    List<Pj_Bean.DataBean> pjlist;    public PJAdapter(Context context, List<Pj_Bean.DataBean> pjlist) {        this.context = context;        this.pjlist = pjlist;    }    @Override    public int getCount() {        return pjlist.size();    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        PJHolder holder;        if(convertView==null){            convertView=View.inflate(context, R.layout.pj_item,null);            holder=new PJHolder();            holder.pj_tv=convertView.findViewById(R.id.pj_tv);            holder.name_tv=convertView.findViewById(R.id.name_tv);            convertView.setTag(holder);        }else{            holder= (PJHolder) convertView.getTag();        }        holder.name_tv.setText(pjlist.get(position).getName());        holder.pj_tv.setText(pjlist.get(position).getComment());        return convertView;    }    class PJHolder{        TextView name_tv;        TextView pj_tv;    }}

pj_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_height="match_parent">    <TextView        android:id="@+id/name_tv"        android:layout_width="match_parent"        android:textSize="20sp"        android:text="111111111"        android:textColor="@color/colorAccent"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/pj_tv"        android:layout_marginTop="10dp"        android:layout_width="match_parent"        android:textSize="15sp"        android:text="111111111"        android:layout_height="wrap_content" /></LinearLayout>
Been类
public class Pj_Bean {    /**     * data : [{"uid":2513954815,"comment":"很好的一双鞋子,平时穿36的,这次买了37的有点大,还好店家送了鞋垫,穿着刚好,鞋子打开没有异味,店家在里面放了香包,打开就有一股淡淡的香味。","stars":0,"desc_score":5,"logistics_score":5,"service_score":5,"specs":"[{\"spec_id\":1,\"spec_key\":\"颜色\",\"spec_value\":\"黑色\"},{\"spec_id\":77529,\"spec_key\":\"尺码\",\"spec_value\":\"37标准码\"}]","time":1512469342,"avatar":"http://avatar.yangkeduo.com/a/4a91af91439765085c770b00ae75a8dc959c3628-1507610658?x-oss-process=image/resize,w_100","name":"左慧","pictures":[{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/26f2f1fd865d7678f2a9beba9ca3ff53.jpeg","width":600,"height":800},{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/abfb4dd9c7b6433b5c20159c719b6a4d.jpeg","width":600,"height":800},{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/e670dca56f5864cf99eca93048b33b29.jpeg","width":600,"height":800}],"review_id":"127699239209479135"},{"uid":4332939209,"comment":"很喜欢的一双鞋子,和卖家描述的一样个人一直很喜欢运动休闲风,这双鞋上脚舒适保暖,不管走跳蹦跑都可以,喜欢可以购买,价格便宜","stars":0,"desc_score":5,"logistics_score":5,"service_score":5,"specs":"[{\"spec_id\":1,\"spec_key\":\"颜色\",\"spec_value\":\"黑色\"},{\"spec_id\":33339,\"spec_key\":\"尺码\",\"spec_value\":\"40标准码\"}]","time":1512538610,"avatar":"http://avatar.yangkeduo.com/a/62a481221d5083bae589a8c458b933cb6e31e500-1508804376?x-oss-process=image/resize,w_100","name":"洋洋","pictures":[],"review_id":"127844506127969247"}]     * recommend_list : []     * average : 0.0     * number : 52     * score_num : 92     * labels : [{"id":2,"level":1,"name":"质量很好","num":10,"positive":1},{"id":746,"level":2,"name":"很舒服","num":5,"positive":1},{"id":3,"level":1,"name":"质量不错","num":3,"positive":1}]     */    private double average;    private int number;    private int score_num;    private List<DataBean> data;    private List<?> recommend_list;    private List<LabelsBean> labels;    public double getAverage() {        return average;    }    public void setAverage(double average) {        this.average = average;    }    public int getNumber() {        return number;    }    public void setNumber(int number) {        this.number = number;    }    public int getScore_num() {        return score_num;    }    public void setScore_num(int score_num) {        this.score_num = score_num;    }    public List<DataBean> getData() {        return data;    }    public void setData(List<DataBean> data) {        this.data = data;    }    public List<?> getRecommend_list() {        return recommend_list;    }    public void setRecommend_list(List<?> recommend_list) {        this.recommend_list = recommend_list;    }    public List<LabelsBean> getLabels() {        return labels;    }    public void setLabels(List<LabelsBean> labels) {        this.labels = labels;    }    public static class DataBean {        /**         * uid : 2513954815         * comment : 很好的一双鞋子,平时穿36的,这次买了37的有点大,还好店家送了鞋垫,穿着刚好,鞋子打开没有异味,店家在里面放了香包,打开就有一股淡淡的香味。         * stars : 0         * desc_score : 5         * logistics_score : 5         * service_score : 5         * specs : [{"spec_id":1,"spec_key":"颜色","spec_value":"黑色"},{"spec_id":77529,"spec_key":"尺码","spec_value":"37标准码"}]         * time : 1512469342         * avatar : http://avatar.yangkeduo.com/a/4a91af91439765085c770b00ae75a8dc959c3628-1507610658?x-oss-process=image/resize,w_100         * name : 左慧         * pictures : [{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/26f2f1fd865d7678f2a9beba9ca3ff53.jpeg","width":600,"height":800},{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/abfb4dd9c7b6433b5c20159c719b6a4d.jpeg","width":600,"height":800},{"url":"http://pinduoduoimg.yangkeduo.com/review/2017-12-05/e670dca56f5864cf99eca93048b33b29.jpeg","width":600,"height":800}]         * review_id : 127699239209479135         */        private long uid;        private String comment;        private int stars;        private int desc_score;        private int logistics_score;        private int service_score;        private String specs;        private int time;        private String avatar;        private String name;        private String review_id;        private List<PicturesBean> pictures;        public long getUid() {            return uid;        }        public void setUid(long uid) {            this.uid = uid;        }        public String getComment() {            return comment;        }        public void setComment(String comment) {            this.comment = comment;        }        public int getStars() {            return stars;        }        public void setStars(int stars) {            this.stars = stars;        }        public int getDesc_score() {            return desc_score;        }        public void setDesc_score(int desc_score) {            this.desc_score = desc_score;        }        public int getLogistics_score() {            return logistics_score;        }        public void setLogistics_score(int logistics_score) {            this.logistics_score = logistics_score;        }        public int getService_score() {            return service_score;        }        public void setService_score(int service_score) {            this.service_score = service_score;        }        public String getSpecs() {            return specs;        }        public void setSpecs(String specs) {            this.specs = specs;        }        public int getTime() {            return time;        }        public void setTime(int time) {            this.time = time;        }        public String getAvatar() {            return avatar;        }        public void setAvatar(String avatar) {            this.avatar = avatar;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public String getReview_id() {            return review_id;        }        public void setReview_id(String review_id) {            this.review_id = review_id;        }        public List<PicturesBean> getPictures() {            return pictures;        }        public void setPictures(List<PicturesBean> pictures) {            this.pictures = pictures;        }        public static class PicturesBean {            /**             * url : http://pinduoduoimg.yangkeduo.com/review/2017-12-05/26f2f1fd865d7678f2a9beba9ca3ff53.jpeg             * width : 600             * height : 800             */            private String url;            private int width;            private int height;            public String getUrl() {                return url;            }            public void setUrl(String url) {                this.url = url;            }            public int getWidth() {                return width;            }            public void setWidth(int width) {                this.width = width;            }            public int getHeight() {                return height;            }            public void setHeight(int height) {                this.height = height;            }        }    }    public static class LabelsBean {        /**         * id : 2         * level : 1         * name : 质量很好         * num : 10         * positive : 1         */        private int id;        private int level;        private String name;        private int num;        private int positive;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public int getLevel() {            return level;        }        public void setLevel(int level) {            this.level = level;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getNum() {            return num;        }        public void setNum(int num) {            this.num = num;        }        public int getPositive() {            return positive;        }        public void setPositive(int positive) {            this.positive = positive;        }    }}

View层接口
//评价XView层接口
public interface IPJDataView {    //评价View层接口    public void pjShowData(List<Pj_Bean.DataBean> pjlist);    public String getId();}
//Model层的接口
public interface IPJDataModel {    //总评价    public void getPJData(String id, Observer observer);}
//评价页面继承接口

public class PJDataModel implements IPJDataModel {    //评价页面    @Override    public void getPJData(String id,Observer observer) {        OkHttpClient client=new OkHttpClient.Builder().build();        RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client)                .setCreate(PJUrl.class)                .getPj(id)                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(observer);    }}
//评价页面P层
public class PJPresenter {    //评价页面    PJDataModel model;    IPJDataView view;    List<Pj_Bean.DataBean> pjlist=new ArrayList<>();    public PJPresenter(IPJDataView view) {        this.view = view;        model=new PJDataModel();    }    public void ppData(){        String id=view.getId();        model.getPJData(id,new Observer<Pj_Bean>(){            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                Log.i("111111p","onError");            }            @Override            public void onNext(Pj_Bean pj_bean) {                pjlist.addAll(pj_bean.getData());                view.pjShowData(pjlist);            }        });    }}
//评价页面继承接口
//评价页面View层的Activitypublic class PingJiaActivity extends AppCompatActivity implements IPJDataView{    PJXAdapter pjxAdapter;    PJPresenter pjPresenter;    String id;    List<Pj_Bean.DataBean> pjlist = new ArrayList<>();    private ListView mPjLv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_ping_jia);        initView();        Intent intent=getIntent();        id=intent.getStringExtra("id");        pjPresenter=new PJPresenter(this);        pjPresenter.ppData();    }    private void initView() {        mPjLv = (ListView) findViewById(R.id.pj_lv);    }    @Override    public void pjShowData(List<Pj_Bean.DataBean> pjlist) {        pjxAdapter=new PJXAdapter(this,pjlist);        mPjLv.setAdapter(pjxAdapter);    }    @Override    public String getId() {        return id;    }}

activity_ping_jia.xml

<?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="clas.view.PingJiaActivity">    <ListView        android:id="@+id/pj_lv"        android:layout_width="match_parent"        android:layout_height="match_parent">    </ListView></LinearLayout>
//评价页面的适配器
//评价页面的适配器public class PJXAdapter extends BaseAdapter {    Context context;    List<Pj_Bean.DataBean> pjlist;    public PJXAdapter(Context context, List<Pj_Bean.DataBean> pjlist) {        this.context = context;        this.pjlist = pjlist;    }    @Override    public int getCount() {        return pjlist.size();    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        PjxHolder holder;        if(convertView==null){            convertView=View.inflate(context, R.layout.pjx_item,null);            holder=new PjxHolder();            holder.p_name=convertView.findViewById(R.id.p_name);            holder.p_nr=convertView.findViewById(R.id.p_nr);            holder.p_sdv=convertView.findViewById(R.id.p_sdv);            convertView.setTag(holder);        }else{            holder= (PjxHolder) convertView.getTag();        }        holder.p_name.setText(pjlist.get(position).getName());        holder.p_nr.setText(pjlist.get(position).getComment());        holder.p_sdv.setImageURI(pjlist.get(position).getAvatar());        return convertView;    }    class PjxHolder{        TextView p_name,p_nr;        SimpleDraweeView p_sdv;    }}
pjx_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/p_name"        android:text="11111"        android:textColor="@color/red"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/p_nr"        android:text="11111"        android:layout_marginTop="15dp"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/p_sdv"        android:layout_width="200dp"        android:layout_height="200dp" /></LinearLayout>

原创粉丝点击