展示数据使用:recyclerview,retrofit,greendao,butterknife,eventbus,fresco。实现效果图列表。MVP模式。

来源:互联网 发布:fcn网络结构 编辑:程序博客网 时间:2024/06/06 08:58

实现思路必须步骤。新框架愿各位同门进行学习,思路清析一下。

一,首先添加依赖。

compile 'com.squareup.retrofit2:converter-gson:2.3.0'implementation 'com.android.support:recyclerview-v7:26.1.0'compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'org.greenrobot:greendao:3.2.0'compile 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'compile 'org.greenrobot:eventbus:3.1.1'compile 'com.facebook.fresco:fresco:1.5.0'
二。添加网络权限;
  <uses-permission android:name="android.permission.INTERNET"/>
三。接下来就是类的创建。

      1,对对数据类的封装。创建bean类。

 

public class Bean {    /**     * code : 200     * msg : success     * data : {"category":[{"id":"16","cat_name":"按功效","is_leaf":"0","children":[{"id":"17","cat_name":"补水保湿","is_leaf":"1"},{"id":"31","cat_name":"舒缓修护","is_leaf":"1"},{"id":"19","cat_name":"控油去痘","is_leaf":"1"},{"id":"18","cat_name":"美白提亮","is_leaf":"1"},{"id":"20","cat_name":"紧致抗皱","is_leaf":"1"}]},{"id":"6","cat_name":"按属性","is_leaf":"0","children":[{"id":"38","cat_name":"面膜","is_leaf":"0"},{"id":"39","cat_name":"润肤水","is_leaf":"1"},{"id":"40","cat_name":"润肤乳","is_leaf":"1"},{"id":"24","cat_name":"洁面乳","is_leaf":"0"},{"id":"35","cat_name":"其他","is_leaf":"0"},{"id":"33","cat_name":"实惠套装","is_leaf":"1"},{"id":"9","cat_name":"贴式面膜","is_leaf":"0"},{"id":"10","cat_name":"睡眠面膜","is_leaf":"0"},{"id":"23","cat_name":"泥浆面膜","is_leaf":"0"},{"id":"41","cat_name":"男士","is_leaf":"0"}]},{"id":"11","cat_name":"按肤质","is_leaf":"0","children":[{"id":"14","cat_name":"混合性肤质","is_leaf":"1"},{"id":"13","cat_name":"中性肤质","is_leaf":"1"},{"id":"29","cat_name":"干性肤质","is_leaf":"1"},{"id":"28","cat_name":"油性肤质","is_leaf":"1"},{"id":"15","cat_name":"痘痘肤质","is_leaf":"1"},{"id":"37","cat_name":"敏感肤质","is_leaf":"0"}]}],"goodsBrief":[{"id":"121","goods_name":"经典款丨美白嫩肤面膜7片","shop_price":49.9,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/121/goods_img/17062610568378169043195978.jpg","reservable":false,"efficacy":"美白嫩肤 层层葆鲜","stock_number":0,"restrict_purchase_num":0},{"id":"684","goods_name":"解救肌渴丨花粹水润面膜套装10片","shop_price":29.9,"market_price":139,"goods_img":"https://image.yunifang.com/yunifang/images/goods/684/goods_img/17062610401397749701177609.jpg","reservable":false,"efficacy":"水润充盈 鲜嫩少女肌","stock_number":0,"restrict_purchase_num":0},{"id":"772","goods_name":"热销爆款丨清润莹亮黑膜套装21片","shop_price":99.9,"market_price":297,"goods_img":"https://image.yunifang.com/yunifang/images/goods/772/goods_img/171016095389114258195255761.jpg","reservable":false,"efficacy":"自然莹亮  水感瓷肌","stock_number":0,"restrict_purchase_num":0},{"id":"5","goods_name":"亮采金桂花眼膜贴60片","shop_price":69,"market_price":129,"goods_img":"https://image.yunifang.com/yunifang/images/goods/5/goods_img/17103118031591202108007689.jpg","reservable":false,"efficacy":"补水靓眼 改善熊猫眼","stock_number":0,"restrict_purchase_num":0},{"id":"343","goods_name":"美白嫩肤润肤水150ml","shop_price":69,"market_price":119,"goods_img":"https://image.yunifang.com/yunifang/images/goods/343/goods_img/170626103423611420000294568.jpg","reservable":false,"efficacy":"补水保湿 美白嫩肤","stock_number":0,"restrict_purchase_num":0},{"id":"9","goods_name":"玫瑰滋养矿物睡眠面膜180g","shop_price":59.9,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/9/goods_img/170626112611018894167156705.jpg","reservable":false,"efficacy":"镇店之宝 彻夜补水","stock_number":0,"restrict_purchase_num":0},{"id":"10","goods_name":"美白嫩肤睡眠面膜180g","shop_price":69,"market_price":119,"goods_img":"https://image.yunifang.com/yunifang/images/goods/10/goods_img/170626112190919312919673075.jpg","reservable":false,"efficacy":"水润一夜 美白透亮","stock_number":0,"restrict_purchase_num":0},{"id":"446","goods_name":"芦荟补水保湿凝胶150g","shop_price":49.9,"market_price":89,"goods_img":"https://image.yunifang.com/yunifang/images/goods/446/goods_img/17112211433972519259384989.jpg","reservable":false,"efficacy":"滋养肌肤 自然水润","stock_number":0,"restrict_purchase_num":0},{"id":"16","goods_name":"玫瑰滋养保湿四件套","shop_price":169.9,"market_price":259.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/16/goods_img/17062611152592656236701367.jpg","reservable":false,"efficacy":"一整套源源补水","stock_number":0,"restrict_purchase_num":0},{"id":"8","goods_name":"全新升级丨美白嫩肤面膜20片","shop_price":129.9,"market_price":359,"goods_img":"https://image.yunifang.com/yunifang/images/goods/8/goods_img/170818182578717903477668239.jpg","reservable":false,"efficacy":"真美白 匠心造","stock_number":0,"restrict_purchase_num":0},{"id":"14","goods_name":"矿物泥浆鼻膜60g","shop_price":55,"market_price":69,"goods_img":"https://image.yunifang.com/yunifang/images/goods/14/goods_img/170626111762918631255244111.jpg","reservable":false,"efficacy":"收敛毛孔 改善黑头","stock_number":0,"restrict_purchase_num":0},{"id":"189","goods_name":"清爽平衡护肤三件套","shop_price":99.9,"market_price":179.9,"goods_img":"https://image.yunifang.com/yunifang/images/goods/189/goods_img/1706261046499486999388441.jpg","reservable":false,"efficacy":"深层清洁 平衡水油","stock_number":0,"restrict_purchase_num":0},{"id":"11","goods_name":"清爽平衡矿物泥浆面膜260g","shop_price":99,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/11/goods_img/170626112085420599974158029.jpg","reservable":false,"efficacy":"口碑泥浆 清爽控油","stock_number":0,"restrict_purchase_num":0},{"id":"4","goods_name":"黑玫瑰矿物洁面乳100ml","shop_price":49,"market_price":59,"goods_img":"https://image.yunifang.com/yunifang/images/goods/4/goods_img/17062611262464209534577694.jpg","reservable":false,"efficacy":"温和清洁 提亮肤色","stock_number":0,"restrict_purchase_num":0},{"id":"559","goods_name":"竹炭净透矿物泥浆面膜110g","shop_price":59,"market_price":99,"goods_img":"https://image.yunifang.com/yunifang/images/goods/559/goods_img/170627164784010618075663103.jpg","reservable":false,"efficacy":"控油净肤 细腻毛孔","stock_number":0,"restrict_purchase_num":0}]}     */    private int code;    private String msg;    private DataBean data;    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 DataBean getData() {        return data;    }    public void setData(DataBean data) {        this.data = data;    }    public static class DataBean {        private List<CategoryBean> category;        private List<GoodsBriefBean> goodsBrief;        public List<CategoryBean> getCategory() {            return category;        }        public void setCategory(List<CategoryBean> category) {            this.category = category;        }        public List<GoodsBriefBean> getGoodsBrief() {            return goodsBrief;        }        public void setGoodsBrief(List<GoodsBriefBean> goodsBrief) {            this.goodsBrief = goodsBrief;        }        public static class CategoryBean {            /**             * id : 16             * cat_name : 按功效             * is_leaf : 0             * children : [{"id":"17","cat_name":"补水保湿","is_leaf":"1"},{"id":"31","cat_name":"舒缓修护","is_leaf":"1"},{"id":"19","cat_name":"控油去痘","is_leaf":"1"},{"id":"18","cat_name":"美白提亮","is_leaf":"1"},{"id":"20","cat_name":"紧致抗皱","is_leaf":"1"}]             */            private String id;            private String cat_name;            private String is_leaf;            private List<ChildrenBean> children;            public String getId() {                return id;            }            public void setId(String id) {                this.id = id;            }            public String getCat_name() {                return cat_name;            }            public void setCat_name(String cat_name) {                this.cat_name = cat_name;            }            public String getIs_leaf() {                return is_leaf;            }            public void setIs_leaf(String is_leaf) {                this.is_leaf = is_leaf;            }            public List<ChildrenBean> getChildren() {                return children;            }            public void setChildren(List<ChildrenBean> children) {                this.children = children;            }            public static class ChildrenBean {                /**                 * id : 17                 * cat_name : 补水保湿                 * is_leaf : 1                 */                private String id;                private String cat_name;                private String is_leaf;                public String getId() {                    return id;                }                public void setId(String id) {                    this.id = id;                }                public String getCat_name() {                    return cat_name;                }                public void setCat_name(String cat_name) {                    this.cat_name = cat_name;                }                public String getIs_leaf() {                    return is_leaf;                }                public void setIs_leaf(String is_leaf) {                    this.is_leaf = is_leaf;                }            }        }    }}2.创建连接bean—— GoodsBriefBean 类。
public  class GoodsBriefBean {    /**     * id : 121     * goods_name : 经典款丨美白嫩肤面膜7片     * shop_price : 49.9     * market_price : 99.0     * goods_img : https://image.yunifang.com/yunifang/images/goods/121/goods_img/17062610568378169043195978.jpg     * reservable : false     * efficacy : 美白嫩肤 层层葆鲜     * stock_number : 0     * restrict_purchase_num : 0     */    @Id(autoincrement = true)    private Long iid;    private String id;    private String goods_name;    private double shop_price;    private double market_price;    private String goods_img;    private boolean reservable;    private String efficacy;    private int stock_number;    private int restrict_purchase_num;    public GoodsBriefBean() {    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getGoods_name() {        return goods_name;    }    public void setGoods_name(String goods_name) {        this.goods_name = goods_name;    }    public double getShop_price() {        return shop_price;    }    public void setShop_price(double shop_price) {        this.shop_price = shop_price;    }    public double getMarket_price() {        return market_price;    }    public void setMarket_price(double market_price) {        this.market_price = market_price;    }    public String getGoods_img() {        return goods_img;    }    public void setGoods_img(String goods_img) {        this.goods_img = goods_img;    }    public boolean isReservable() {        return reservable;    }    public void setReservable(boolean reservable) {        this.reservable = reservable;    }    public String getEfficacy() {        return efficacy;    }    public void setEfficacy(String efficacy) {        this.efficacy = efficacy;    }    public int getStock_number() {        return stock_number;    }    public void setStock_number(int stock_number) {        this.stock_number = stock_number;    }    public int getRestrict_purchase_num() {        return restrict_purchase_num;    }    public void setRestrict_purchase_num(int restrict_purchase_num) {        this.restrict_purchase_num = restrict_purchase_num;    }    public Long getIid() {        return this.iid;    }    public void setIid(Long iid) {        this.iid = iid;    }    public boolean getReservable() {        return this.reservable;    }}
3.创建参数Bean。

public class EventBean {    public String url;    public String title;    public EventBean(String url, String title) {        this.url = url;        this.title = title;    }    public String getUrl() {        return url;    }    public String getTitle() {        return title;    }}
4,IApplication初始化类的创建。

       

public class IApplication extends Application {    public static IGetDataBase iGetDataBase;    public static DaoSession session;    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://m.yunifang.com")                .addConverterFactory(GsonConverterFactory.create())                .build();        iGetDataBase = retrofit.create(IGetDataBase.class);        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"test1");        Database database =  helper.getWritableDb();        session = new DaoMaster(database).newSession();    }}
三,实现Model包中的类。

          1,第一步创建MainModel接口·

    public interface MainModel {  }  
2,创建MainModelImpl类。

public class MainModelImpl {    /**     * get 请求     * @param callBack     */    public void getData(final ModelCallBack callBack){        Call<Bean> call = IApplication.iGetDataBase.get("96333","bf3386e14fe5bb0bcef234baebca2414");       call.enqueue(new Callback<Bean>() {           @Override           public void onResponse(Call<Bean> call, Response<Bean> response) {               Bean bean = response.body();               callBack.onSuccess(bean);               IApplication.session.getGoodsBriefBeanDao().insertInTx(bean.getData().getGoodsBrief());           }           @Override           public void onFailure(Call<Bean> call, Throwable t) {             callBack.onFailure(new Exception(""));           }       });    }    /**     * post 请求     */    public void  postData(final ModelCallBack callBack){        Call<Bean> call = IApplication.iGetDataBase.get("96333","bf3386e14fe5bb0bcef234baebca2414");        call.enqueue(new Callback<Bean>() {            @Override            public void onResponse(Call<Bean> call, Response<Bean> response) {                Bean bean = response.body();                callBack.onSuccess(bean);            }            @Override            public void onFailure(Call<Bean> call, Throwable t) {            callBack.onFailure(new Exception("") );            }        });    }}
3,创建ModelCallBack接口。

public interface ModelCallBack {    public void onSuccess(Bean bean);    public void onFailure(Exception e);   }
四。实现presenter包中的类。
    1,创建MainPresenter类。
public class MainPresenter {    private IMainView iView ;    private MainModelImpl mainModel ;    public MainPresenter(IMainView view){        this.iView = view;        this.mainModel = new MainModelImpl();    }    public void get(){        mainModel.getData(new ModelCallBack() {            @Override            public void onSuccess(Bean bean) {                if(iView != null){                    iView.onSuccess(bean);                }            }            @Override            public void onFailure(Exception e) {                if(iView != null){                    iView.onFailure(e);                }            }        });    }    public void post(){        mainModel.postData(new ModelCallBack() {            @Override            public void onSuccess(Bean bean) {                if(iView != null){                    iView.onSuccess(bean);                }            }            @Override            public void onFailure(Exception e) {                if(iView != null){                    iView.onFailure(e);                }            }        });    }}
五。实现view包中类。

         1,创建IMainView类。

public interface IMainView {    public void onSuccess(Bean bean);    public void onFailure(Exception e);}

六。创建adapter得类。

     创建IApdater适配器类。

  

public class IApdater extends RecyclerView.Adapter<IApdater.IViewHolder>{    Context context;    List<GoodsBriefBean> list ;    public IApdater(Context context) {        this.context = context;    }    public void addData(Bean bean){        if(list == null){            list = new ArrayList<>();        }        list.addAll(bean.getData().getGoodsBrief());        notifyDataSetChanged();    }    @Override    public IApdater.IViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.layout, null);        return new IViewHolder(view);    }    @Override    public void onBindViewHolder(IApdater.IViewHolder holder, final int position) {        //holder.adapterSimpledraweeview.setImageURI("https://image.yunifang.com/yunifang/images/goods/121/goods_img/17062610568378169043195978.jpg");        holder.adapterSimpledraweeview.setImageURI(list.get(position).getGoods_img());        holder.adapterTextview.setText(list.get(position).getGoods_name());        holder.adapterTextview.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                EventBus.getDefault().postSticky(new EventBean(list.get(position).getGoods_img(),list.get(position).getGoods_name()));                context.startActivity(new Intent(context, Main2Activity.class));            }        });    }    @Override    public int getItemCount() {        return list == null ? 0 : list.size();    }    static class IViewHolder  extends RecyclerView.ViewHolder{        @BindView(R.id.adapter_simpledraweeview)        SimpleDraweeView adapterSimpledraweeview;        @BindView(R.id.adapter_textview)        TextView adapterTextview;        IViewHolder(View view) {            super(view);            ButterKnife.bind(this, view);        }    }}
七。创建MainActivity类。
public class MainActivity extends Activity implements IMainView {    @BindView(R.id.recycleview)    RecyclerView recycleview;    private MainPresenter presenter;    private IApdater adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        presenter = new MainPresenter(this);        presenter.get();        LinearLayoutManager manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);        adapter = new IApdater(this);        recycleview.setLayoutManager(manager);        recycleview.setAdapter(adapter);        List<GoodsBriefBean> listBeans =  IApplication.session.getGoodsBriefBeanDao().loadAll();        for(GoodsBriefBean bean : listBeans){            System.out.println(bean.toString());        }    }    @Override    public void onSuccess(Bean bean) {        adapter.addData(bean);    }    @Override    public void onFailure(Exception e) {    }}
八。创建IGetDataBase请求接口。
 
public interface IGetDataBase {    //random=96333&encode=bf3386e14fe5bb0bcef234baebca2414    @GET("/yunifang/mobile/category/list")    Call<Bean> get(@Query("random") String key,@Query("encode") String encode);    /**     * post 璇锋眰     * @param key     * @return     */    @FormUrlEncoded    @POST("/weixin/query")    Call<Bean> post(@Field("key") String key);}
九。最后添加两布局。
1,activity布局。
              
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout 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.lianxizongjie.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycleview"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></android.support.constraint.ConstraintLayout>
   2.条目布局创建laout。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="horizontal"    android:layout_height="match_parent"><com.facebook.drawee.view.SimpleDraweeView    android:id="@+id/adapter_simpledraweeview"    android:layout_width="100dp"    android:layout_height="100dp" />    <TextView        android:id="@+id/adapter_textview"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>
这就完成了数据显示。

阅读全文
0 0