搜索商品,实现网格布局

逃离我推掉我的手 2022-06-03 05:55 250阅读 0赞

效果图:
这里写图片描述
这里写图片描述

网络权限:

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

注意事项

这里写图片描述

添加依赖:

  1. //okhttp3 compile 'com.squareup.okhttp3:okhttp:3.9.0' //图片Glide compile 'com.github.bumptech.glide:glide:3.7.0' //Gson compile 'com.google.code.gson:gson:2.8.1' //刷新pullToRefresh compile 'com.jwenfeng.pulltorefresh:library:1.0.3' compile 'com.jcodecraeer:xrecyclerview:1.2.6' //黄油刀 compile 'com.jakewharton:butterknife:8.8.1' compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

在activity_main.xml中的布局:

  1. <LinearLayout 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" tools:context="com.example.zhokaosansousuo.MainActivity" android:orientation="vertical">
  2. <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal">
  3. <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="搜索商品" android:textSize="22sp" />
  4. <ImageView android:id="@+id/qieHuanIv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="9" android:src="@mipmap/lv_icon" android:onClick="qieHuan" android:padding="10dp" />
  5. </LinearLayout>
  6. <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="7dp">
  7. <EditText android:id="@+id/edt_shurukuang" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="2" android:hint="请输入关键词搜索" />
  8. <Button android:id="@+id/sousuoBut" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="8" android:onClick="souSuoBut" android:text="搜索" />
  9. </LinearLayout>
  10. <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xRecView" android:layout_width="wrap_content" android:layout_height="wrap_content">
  11. </com.jcodecraeer.xrecyclerview.XRecyclerView>
  12. </LinearLayout>

在创建一个Xrecview.xml布局:(适配器的item布局)

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
  2. <ImageView android:id="@+id/xRecView_itemsj_iv" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="fitXY" android:src="@mipmap/ic_launcher"/>
  3. <LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:orientation="vertical" android:gravity="center_vertical">
  4. <TextView android:id="@+id/xRecView_itemsj_titel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:singleLine="true" android:textSize="22sp"/>
  5. <TextView android:id="@+id/xRecView_itemsj_yuanJia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="10000"/>
  6. <TextView android:id="@+id/xRecView_itemsj_xianJia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="50" android:textColor="@color/colorAccent"/>
  7. </LinearLayout>
  8. </LinearLayout>

MainActivity :

  1. public class MainActivity extends AppCompatActivity {
  2. private boolean b = false;
  3. private boolean sjBJB = false;
  4. private ImageView qhIv;
  5. private EditText srkEdt;
  6. private XRecyclerView xRecView;
  7. private XRecAdapterSJ xRecAdapterSJ;
  8. private XRecAdapterBJB xRecAdapterBJB;
  9. private List<SJBean.DataBean> sjList;
  10. private List<BJBean.DataBean> bjbList;
  11. private String srkStr;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. initView();
  17. initDataSJ();
  18. }
  19. private void initDataBJB() {
  20. Map<String, String> mapBJB = new HashMap<>();
  21. mapBJB.put("keywords", "笔记本");
  22. mapBJB.put("page", "1");
  23. mapBJB.put("source", "2");
  24. OkHttp3Utils.doPost(URLs.SHANGPIN, mapBJB, new GsonObjectCallback<BJBean>() {
  25. @Override
  26. public void onUi(BJBean bjbBean) {
  27. bjbList = bjbBean.getData();
  28. xRecView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
  29. xRecAdapterBJB = new XRecAdapterBJB(bjbList, MainActivity.this);
  30. xRecView.setAdapter(xRecAdapterBJB);
  31. }
  32. @Override
  33. public void onFailed(Call call, IOException e) {
  34. }
  35. });
  36. }
  37. private void initDataSJ() {
  38. Map<String, String> mapSJ = new HashMap<>();
  39. mapSJ.put("keywords", "手机");
  40. mapSJ.put("page", "1");
  41. mapSJ.put("source", "1");
  42. OkHttp3Utils.doPost(URLs.SHANGPIN, mapSJ, new GsonObjectCallback<SJBean>() {
  43. @Override
  44. public void onUi(SJBean sjBean) {
  45. sjList = sjBean.getData();
  46. xRecAdapterSJ = new XRecAdapterSJ(sjList, MainActivity.this);
  47. xRecView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
  48. xRecView.setAdapter(xRecAdapterSJ);
  49. }
  50. @Override
  51. public void onFailed(Call call, IOException e) {
  52. }
  53. });
  54. }
  55. private void initView() {
  56. qhIv = (ImageView) findViewById(R.id.qieHuanIv);
  57. srkEdt = (EditText) findViewById(R.id.edt_shurukuang);
  58. xRecView = (XRecyclerView) findViewById(R.id.xRecView);
  59. initFresh();
  60. }
  61. private void initFresh() {
  62. xRecView.setLoadingListener(new XRecyclerView.LoadingListener() {
  63. @Override
  64. public void onRefresh() {
  65. if (sjList != null) {
  66. initDataSJ();
  67. xRecAdapterSJ.notifyDataSetChanged();
  68. }
  69. xRecView.refreshComplete();
  70. Toast.makeText(MainActivity.this, "刷新了数据", Toast.LENGTH_SHORT).show();
  71. }
  72. @Override
  73. public void onLoadMore() {
  74. if (sjList != null) {
  75. sjList.addAll(sjList.size(), sjList);
  76. xRecAdapterSJ.notifyDataSetChanged();
  77. }
  78. xRecView.loadMoreComplete();
  79. Toast.makeText(MainActivity.this, "加载了数据", Toast.LENGTH_SHORT).show();
  80. }
  81. });
  82. }
  83. public void qieHuan(View view) {
  84. Toast.makeText(MainActivity.this, "点击了切换视图按钮", Toast.LENGTH_SHORT).show();
  85. if (b == true) {
  86. //点击后想要变成什么要的布局样式就搞一个你的需求
  87. xRecView.setLayoutManager(new GridLayoutManager(MainActivity.this, 2));
  88. //给布尔值重新赋值
  89. b = false;
  90. //给点击按钮的图片重新赋值
  91. qhIv.setImageResource(R.mipmap.lv_icon);
  92. } else if (b == false) {
  93. xRecView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
  94. //给布尔值重新赋值
  95. b = true;
  96. //给点击按钮的图片重新赋值
  97. qhIv.setImageResource(R.mipmap.grid_icon);
  98. }//
  99. }
  100. public void souSuoBut(View view) {
  101. srkStr = srkEdt.getText().toString();
  102. Log.e("++++++", "这是输入框的返回字符串内容:" + srkStr);
  103. if (srkStr.equals("")) {
  104. //
  105. Toast.makeText(MainActivity.this, "请输入内容", Toast.LENGTH_SHORT).show();
  106. } else if (srkStr.equals("sj")) {
  107. initDataSJ();
  108. Toast.makeText(MainActivity.this, "展示手机的数据", Toast.LENGTH_SHORT).show();
  109. } else if (srkStr.equals("bjb")) {
  110. initDataBJB();
  111. Toast.makeText(MainActivity.this, "展示笔记本的数据", Toast.LENGTH_SHORT).show();
  112. }
  113. }
  114. }

在创建一个URLs类:

  1. public class URLs {
  2. public static final String SHANGPIN = "http://120.27.23.105/product/searchProducts";
  3. }

创建一个bean包\包里有两个bean

一个是BJBean类:

  1. public class BJBean {
  2. /**
  3. * msg : 查询成功
  4. * code : 0
  5. * data : [{
  6. "bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","itemtype":0,"pid":57,"price":5199,"pscid":40,"salenum":4343,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{
  7. "bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","itemtype":1,"pid":58,"price":6399,"pscid":40,"salenum":545,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"},{
  8. "bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","itemtype":0,"pid":59,"price":5599,"pscid":40,"salenum":675,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"},{
  9. "bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":60,"price":13888,"pscid":40,"salenum":466,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  10. "bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":61,"price":14999,"pscid":40,"salenum":5535,"sellerid":5,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  11. "bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":62,"price":15999,"pscid":40,"salenum":43,"sellerid":6,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  12. "bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":63,"price":10000,"pscid":40,"salenum":3232,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  13. "bargainPrice":11800,"createtime":"2017-10-03T23:43:53","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":64,"price":11000,"pscid":40,"salenum":0,"sellerid":8,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  14. "bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":65,"price":12000,"pscid":40,"salenum":868,"sellerid":9,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{
  15. "bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":66,"price":13000,"pscid":40,"salenum":7676,"sellerid":10,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}]
  16. * page : 1
  17. */
  18. private String msg;
  19. private String code;
  20. private String page;
  21. private List<DataBean> data;
  22. public String getMsg() {
  23. return msg;
  24. }
  25. public void setMsg(String msg) {
  26. this.msg = msg;
  27. }
  28. public String getCode() {
  29. return code;
  30. }
  31. public void setCode(String code) {
  32. this.code = code;
  33. }
  34. public String getPage() {
  35. return page;
  36. }
  37. public void setPage(String page) {
  38. this.page = page;
  39. }
  40. public List<DataBean> getData() {
  41. return data;
  42. }
  43. public void setData(List<DataBean> data) {
  44. this.data = data;
  45. }
  46. public static class DataBean {
  47. /**
  48. * bargainPrice : 11800.0
  49. * createtime : 2017-10-10T17:33:37
  50. * detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
  51. * images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
  52. * itemtype : 0
  53. * pid : 57
  54. * price : 5199.0
  55. * pscid : 40
  56. * salenum : 4343
  57. * sellerid : 1
  58. * subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
  59. * title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银
  60. */
  61. private double bargainPrice;
  62. private String createtime;
  63. private String detailUrl;
  64. private String images;
  65. private int itemtype;
  66. private int pid;
  67. private double price;
  68. private int pscid;
  69. private int salenum;
  70. private int sellerid;
  71. private String subhead;
  72. private String title;
  73. public double getBargainPrice() {
  74. return bargainPrice;
  75. }
  76. public void setBargainPrice(double bargainPrice) {
  77. this.bargainPrice = bargainPrice;
  78. }
  79. public String getCreatetime() {
  80. return createtime;
  81. }
  82. public void setCreatetime(String createtime) {
  83. this.createtime = createtime;
  84. }
  85. public String getDetailUrl() {
  86. return detailUrl;
  87. }
  88. public void setDetailUrl(String detailUrl) {
  89. this.detailUrl = detailUrl;
  90. }
  91. public String getImages() {
  92. return images;
  93. }
  94. public void setImages(String images) {
  95. this.images = images;
  96. }
  97. public int getItemtype() {
  98. return itemtype;
  99. }
  100. public void setItemtype(int itemtype) {
  101. this.itemtype = itemtype;
  102. }
  103. public int getPid() {
  104. return pid;
  105. }
  106. public void setPid(int pid) {
  107. this.pid = pid;
  108. }
  109. public double getPrice() {
  110. return price;
  111. }
  112. public void setPrice(double price) {
  113. this.price = price;
  114. }
  115. public int getPscid() {
  116. return pscid;
  117. }
  118. public void setPscid(int pscid) {
  119. this.pscid = pscid;
  120. }
  121. public int getSalenum() {
  122. return salenum;
  123. }
  124. public void setSalenum(int salenum) {
  125. this.salenum = salenum;
  126. }
  127. public int getSellerid() {
  128. return sellerid;
  129. }
  130. public void setSellerid(int sellerid) {
  131. this.sellerid = sellerid;
  132. }
  133. public String getSubhead() {
  134. return subhead;
  135. }
  136. public void setSubhead(String subhead) {
  137. this.subhead = subhead;
  138. }
  139. public String getTitle() {
  140. return title;
  141. }
  142. public void setTitle(String title) {
  143. this.title = title;
  144. }
  145. }
  146. }

第二个是SJBean类:

  1. public class SJBean {
  2. /**
  3. * msg : 查询成功
  4. * code : 0
  5. * data : [{
  6. "bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","itemtype":1,"pid":45,"price":2999,"pscid":39,"salenum":4666,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"},{
  7. "bargainPrice":6666,"createtime":"2017-10-10T16:01:31","detailUrl":"https://item.m.jd.com/product/5089273.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8284/363/1326459580/71585/6d3e8013/59b857f2N6ca75622.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9346/182/1406837243/282106/68af5b54/59b8480aNe8af7f5c.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8434/54/1359766007/56140/579509d9/59b85801Nfea207db.jpg!q70.jpg","itemtype":0,"pid":46,"price":234,"pscid":39,"salenum":868,"sellerid":2,"subhead":"【iPhone新品上市】新一代iPhone,让智能看起来更不一样","title":"Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"},{
  8. "bargainPrice":1599,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/1993026402.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5863/302/8961270302/97126/41feade1/5981c81cNc1b1fbef.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7003/250/1488538438/195825/53bf31ba/5981c57eN51e95176.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5665/100/8954482513/43454/418611a9/5981c57eNd5fc97ba.jpg!q70.jpg","itemtype":2,"pid":47,"price":111,"pscid":39,"salenum":757,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配 1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"},{
  9. "bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":1,"pid":48,"price":222,"pscid":39,"salenum":656,"sellerid":4,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{
  10. "bargainPrice":1999,"createtime":"2017-10-10T16:09:02","detailUrl":"https://item.m.jd.com/product/5025971.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t7210/232/3738666823/232298/9004583e/59c3a9a7N8de42e15.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8356/82/2107423621/109733/c019b8c6/59c3a9a6Ne9a4bdd7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t10219/74/25356012/171379/7d55e296/59c3a9a8N82fa6e02.jpg!q70.jpg","itemtype":0,"pid":49,"price":333,"pscid":39,"salenum":123,"sellerid":5,"subhead":"vivo X20 带你开启全面屏时代!逆光也清晰,照亮你的美!","title":"vivo X20 全面屏手机 全网通 4GB+64GB 金色 移动联通电信4G手机 双卡双待"},{
  11. "bargainPrice":3455,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":2,"pid":50,"price":444,"pscid":39,"salenum":54,"sellerid":6,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{
  12. "bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":1,"pid":51,"price":555,"pscid":39,"salenum":424,"sellerid":7,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{
  13. "bargainPrice":3455,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":0,"pid":52,"price":666,"pscid":39,"salenum":212,"sellerid":8,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{
  14. "bargainPrice":2999,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2385655.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t2068/298/2448145915/157953/7be197df/56d51a42Nd86f1c8e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2437/128/1687178395/117431/bcc190c1/56d3fcbaNb2963d21.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2467/222/2263160610/95597/927b8a2f/56d3eafeNdecebeb6.jpg!q70.jpg","itemtype":2,"pid":53,"price":777,"pscid":39,"salenum":0,"sellerid":9,"subhead":"Super AMOLED三星双曲面2K 屏,支持无线充电!","title":"三星 Galaxy S7 edge(G9350)4GB+32GB 铂光金 移动联通电信4G手机 双卡双待"},{
  15. "bargainPrice":3455,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":0,"pid":54,"price":888,"pscid":39,"salenum":7575,"sellerid":10,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"}]
  16. * page : 1
  17. */
  18. private String msg;
  19. private String code;
  20. private String page;
  21. private List<DataBean> data;
  22. public String getMsg() {
  23. return msg;
  24. }
  25. public void setMsg(String msg) {
  26. this.msg = msg;
  27. }
  28. public String getCode() {
  29. return code;
  30. }
  31. public void setCode(String code) {
  32. this.code = code;
  33. }
  34. public String getPage() {
  35. return page;
  36. }
  37. public void setPage(String page) {
  38. this.page = page;
  39. }
  40. public List<DataBean> getData() {
  41. return data;
  42. }
  43. public void setData(List<DataBean> data) {
  44. this.data = data;
  45. }
  46. public static class DataBean {
  47. /**
  48. * bargainPrice : 99.0
  49. * createtime : 2017-10-14T21:38:26
  50. * detailUrl : https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
  51. * images : https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg
  52. * itemtype : 1
  53. * pid : 45
  54. * price : 2999.0
  55. * pscid : 39
  56. * salenum : 4666
  57. * sellerid : 1
  58. * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!
  59. * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机
  60. */
  61. private double bargainPrice;
  62. private String createtime;
  63. private String detailUrl;
  64. private String images;
  65. private int itemtype;
  66. private int pid;
  67. private double price;
  68. private int pscid;
  69. private int salenum;
  70. private int sellerid;
  71. private String subhead;
  72. private String title;
  73. public double getBargainPrice() {
  74. return bargainPrice;
  75. }
  76. public void setBargainPrice(double bargainPrice) {
  77. this.bargainPrice = bargainPrice;
  78. }
  79. public String getCreatetime() {
  80. return createtime;
  81. }
  82. public void setCreatetime(String createtime) {
  83. this.createtime = createtime;
  84. }
  85. public String getDetailUrl() {
  86. return detailUrl;
  87. }
  88. public void setDetailUrl(String detailUrl) {
  89. this.detailUrl = detailUrl;
  90. }
  91. public String getImages() {
  92. return images;
  93. }
  94. public void setImages(String images) {
  95. this.images = images;
  96. }
  97. public int getItemtype() {
  98. return itemtype;
  99. }
  100. public void setItemtype(int itemtype) {
  101. this.itemtype = itemtype;
  102. }
  103. public int getPid() {
  104. return pid;
  105. }
  106. public void setPid(int pid) {
  107. this.pid = pid;
  108. }
  109. public double getPrice() {
  110. return price;
  111. }
  112. public void setPrice(double price) {
  113. this.price = price;
  114. }
  115. public int getPscid() {
  116. return pscid;
  117. }
  118. public void setPscid(int pscid) {
  119. this.pscid = pscid;
  120. }
  121. public int getSalenum() {
  122. return salenum;
  123. }
  124. public void setSalenum(int salenum) {
  125. this.salenum = salenum;
  126. }
  127. public int getSellerid() {
  128. return sellerid;
  129. }
  130. public void setSellerid(int sellerid) {
  131. this.sellerid = sellerid;
  132. }
  133. public String getSubhead() {
  134. return subhead;
  135. }
  136. public void setSubhead(String subhead) {
  137. this.subhead = subhead;
  138. }
  139. public String getTitle() {
  140. return title;
  141. }
  142. public void setTitle(String title) {
  143. this.title = title;
  144. }
  145. }
  146. }

创建一个Utils包:包里面有四个类

第一个类是OKHttp3Utils

  1. public class OkHttp3Utils {
  2. /** * 懒汉 安全 加同步 * 私有的静态成员变量 只声明不创建 * 私有的构造方法 * 提供返回实例的静态方法 */
  3. private static OkHttp3Utils okHttp3Utils = null;
  4. private OkHttp3Utils() {
  5. }
  6. public static OkHttp3Utils getInstance() {
  7. if (okHttp3Utils == null) {
  8. //加同步安全
  9. synchronized (OkHttp3Utils.class) {
  10. if (okHttp3Utils == null) {
  11. okHttp3Utils = new OkHttp3Utils();
  12. }
  13. }
  14. }
  15. return okHttp3Utils;
  16. }
  17. private static OkHttpClient okHttpClient = null;
  18. public synchronized static OkHttpClient getOkHttpClient() {
  19. if (okHttpClient == null) {
  20. //判空 为空创建实例
  21. // okHttpClient = new OkHttpClient();
  22. /** * 和OkHttp2.x有区别的是不能通过OkHttpClient直接设置超时时间和缓存了,而是通过OkHttpClient.Builder来设置, * 通过builder配置好OkHttpClient后用builder.build()来返回OkHttpClient, * 所以我们通常不会调用new OkHttpClient()来得到OkHttpClient,而是通过builder.build(): */
  23. // File sdcache = getExternalCacheDir();
  24. //缓存目录
  25. File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
  26. int cacheSize = 10 * 1024 * 1024;
  27. //OkHttp3拦截器
  28. HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
  29. @Override
  30. public void log(String message) {
  31. Log.i("xxx", message.toString());
  32. }
  33. });
  34. //Okhttp3的拦截器日志分类 4种
  35. httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
  36. okHttpClient = new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS)
  37. //添加OkHttp3的拦截器
  38. .addInterceptor(httpLoggingInterceptor)
  39. .addNetworkInterceptor(new CacheInterceptor())
  40. .writeTimeout(20, TimeUnit.SECONDS).readTimeout(20, TimeUnit.SECONDS)
  41. .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))
  42. .build();
  43. }
  44. return okHttpClient;
  45. }
  46. private static Handler mHandler = null;
  47. public synchronized static Handler getHandler() {
  48. if (mHandler == null) {
  49. mHandler = new Handler();
  50. }
  51. return mHandler;
  52. }
  53. /** * get请求 * 参数1 url * 参数2 回调Callback */
  54. public static void doGet(String url, Callback callback) {
  55. //创建OkHttpClient请求对象
  56. OkHttpClient okHttpClient = getOkHttpClient();
  57. //创建Request
  58. Request request = new Request.Builder().url(url).build();
  59. //得到Call对象
  60. Call call = okHttpClient.newCall(request);
  61. //执行异步请求
  62. call.enqueue(callback);
  63. }
  64. /** * post请求 * 参数1 url * 参数2 回调Callback */
  65. public static void doPost(String url, Map<String, String> params, Callback callback) {
  66. //创建OkHttpClient请求对象
  67. OkHttpClient okHttpClient = getOkHttpClient();
  68. //3.x版本post请求换成FormBody 封装键值对参数
  69. FormBody.Builder builder = new FormBody.Builder();
  70. //遍历集合
  71. for (String key : params.keySet()) {
  72. builder.add(key, params.get(key));
  73. }
  74. //创建Request
  75. Request request = new Request.Builder().url(url).post(builder.build()).build();
  76. Call call = okHttpClient.newCall(request);
  77. call.enqueue(callback);
  78. }
  79. /** * post请求上传文件 * 参数1 url * 参数2 回调Callback */
  80. public static void uploadPic(String url, File file, String fileName) {
  81. //创建OkHttpClient请求对象
  82. OkHttpClient okHttpClient = getOkHttpClient();
  83. //创建RequestBody 封装file参数
  84. RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
  85. //创建RequestBody 设置类型等
  86. RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", fileName, fileBody).build();
  87. //创建Request
  88. Request request = new Request.Builder().url(url).post(requestBody).build();
  89. //得到Call
  90. Call call = okHttpClient.newCall(request);
  91. //执行请求
  92. call.enqueue(new Callback() {
  93. @Override
  94. public void onFailure(Call call, IOException e) {
  95. }
  96. @Override
  97. public void onResponse(Call call, Response response) throws IOException {
  98. //上传成功回调 目前不需要处理
  99. }
  100. });
  101. }
  102. /** * Post请求发送JSON数据 * 参数一:请求Url * 参数二:请求的JSON * 参数三:请求回调 */
  103. public static void doPostJson(String url, String jsonParams, Callback callback) {
  104. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
  105. Request request = new Request.Builder().url(url).post(requestBody).build();
  106. Call call = getOkHttpClient().newCall(request);
  107. call.enqueue(callback);
  108. }
  109. /** * 下载文件 以流的形式把apk写入的指定文件 得到file后进行安装 * 参数一:请求Url * 参数二:保存文件的路径名 * 参数三:保存文件的文件名 */
  110. public static void download(final Context context, final String url, final String saveDir) {
  111. Request request = new Request.Builder().url(url).build();
  112. Call call = getOkHttpClient().newCall(request);
  113. call.enqueue(new Callback() {
  114. @Override
  115. public void onFailure(Call call, IOException e) {
  116. Log.i("xxx", e.toString());
  117. }
  118. @Override
  119. public void onResponse(Call call, final Response response) throws IOException {
  120. InputStream is = null;
  121. byte[] buf = new byte[2048];
  122. int len = 0;
  123. FileOutputStream fos = null;
  124. try {
  125. is = response.body().byteStream();
  126. //apk保存路径
  127. final String fileDir = isExistDir(saveDir);
  128. //文件
  129. File file = new File(fileDir, getNameFromUrl(url));
  130. fos = new FileOutputStream(file);
  131. while ((len = is.read(buf)) != -1) {
  132. fos.write(buf, 0, len);
  133. }
  134. fos.flush();
  135. //apk下载完成后 调用系统的安装方法
  136. Intent intent = new Intent(Intent.ACTION_VIEW);
  137. intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
  138. context.startActivity(intent);
  139. } catch (IOException e) {
  140. e.printStackTrace();
  141. } finally {
  142. if (is != null) is.close();
  143. if (fos != null) fos.close();
  144. }
  145. }
  146. });
  147. }
  148. /** * @param saveDir * @return * @throws IOException 判断下载目录是否存在 */
  149. public static String isExistDir(String saveDir) throws IOException {
  150. // 下载位置
  151. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  152. File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir);
  153. if (!downloadFile.mkdirs()) {
  154. downloadFile.createNewFile();
  155. }
  156. String savePath = downloadFile.getAbsolutePath();
  157. Log.e("savePath", savePath);
  158. return savePath;
  159. }
  160. return null;
  161. }
  162. /** * @param url * @return 从下载连接中解析出文件名 */
  163. private static String getNameFromUrl(String url) {
  164. return url.substring(url.lastIndexOf("/") + 1);
  165. }
  166. /** * 为okhttp添加缓存,这里是考虑到服务器不支持缓存时,从而让okhttp支持缓存 */
  167. private static class CacheInterceptor implements Interceptor {
  168. @Override
  169. public Response intercept(Chain chain) throws IOException {
  170. // 有网络时 设置缓存超时时间1个小时
  171. int maxAge = 60 * 60;
  172. // 无网络时,设置超时为1天
  173. int maxStale = 60 * 60 * 24;
  174. Request request = chain.request();
  175. if (NetWorkUtils.isNetWorkAvailable(MyApp.getInstance())) {
  176. //有网络时只从网络获取
  177. request = request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build();
  178. } else {
  179. //无网络时只从缓存中读取
  180. request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
  181. /* Looper.prepare(); Toast.makeText(MyApp.getInstance(), "走拦截器缓存", Toast.LENGTH_SHORT).show(); Looper.loop();*/
  182. }
  183. Response response = chain.proceed(request);
  184. if (NetWorkUtils.isNetWorkAvailable(MyApp.getInstance())) {
  185. response = response.newBuilder()
  186. .removeHeader("Pragma")
  187. .header("Cache-Control", "public, max-age=" + maxAge)
  188. .build();
  189. } else {
  190. response = response.newBuilder()
  191. .removeHeader("Pragma")
  192. .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
  193. .build();
  194. }
  195. return response;
  196. }
  197. }
  198. public interface OnGetServerDateLisnter {
  199. void getData(String string);
  200. }
  201. }

第二类是NetWorkUtils

  1. public class NetWorkUtils { //判断网络是否连接 public static boolean isNetWorkAvailable(Context context) { //网络连接管理器 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //网络信息 NetworkInfo info = connectivityManager.getActiveNetworkInfo(); if (info != null) { return true; } return false; } }

第三个MyAPP类

  1. public class MyApp extends Application { private static MyApp mInstance; @Override public void onCreate() { super.onCreate(); mInstance=this; ImageLoaderConfiguration defaultcof = ImageLoaderConfiguration.createDefault(getApplicationContext()); ImageLoader.getInstance().init(defaultcof); } public static MyApp getInstance(){ return mInstance; }; }

第四个GsonObjectCallback类

  1. public abstract class GsonObjectCallback<T> implements Callback {
  2. private Handler handler = OkHttp3Utils.getInstance().getHandler();
  3. //主线程处理
  4. public abstract void onUi(T t);
  5. //主线程处理
  6. public abstract void onFailed(Call call, IOException e);
  7. //请求失败
  8. @Override
  9. public void onFailure(final Call call, final IOException e) {
  10. handler.post(new Runnable() {
  11. @Override
  12. public void run() {
  13. onFailed(call, e);
  14. }
  15. });
  16. }
  17. //请求json 并直接返回泛型的对象 主线程处理
  18. @Override
  19. public void onResponse(Call call, Response response) throws IOException {
  20. String json = response.body().string();
  21. Class<T> cls = null;
  22. Class clz = this.getClass();
  23. ParameterizedType type = (ParameterizedType) clz.getGenericSuperclass();
  24. Type[] types = type.getActualTypeArguments();
  25. cls = (Class<T>) types[0];
  26. Gson gson = new Gson();
  27. final T t = gson.fromJson(json, cls);
  28. handler.post(new Runnable() {
  29. @Override
  30. public void run() {
  31. onUi(t);
  32. }
  33. });
  34. }
  35. }

创建adapter包,里面有两个适配器

第一个适配器是XRecAdapterBJB

  1. public class XRecAdapterBJB extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<BJBean.DataBean> bjbList; private MainActivity mainActivity; public XRecAdapterBJB(List<BJBean.DataBean> bjbList, MainActivity mainActivity) { this.mainActivity = mainActivity; this.bjbList = bjbList; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(mainActivity, R.layout.xrecview, null); XRecViewHolder xRecViewHolder = new XRecViewHolder(view); return xRecViewHolder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { XRecViewHolder xRecViewHolder = (XRecViewHolder) holder; xRecViewHolder.titel.setText(bjbList.get(position).getTitle()); xRecViewHolder.yj.setText(bjbList.get(position).getBargainPrice() + ""); xRecViewHolder.xj.setText(bjbList.get(position).getPrice() + ""); String[] picUrl = bjbList.get(position).getImages().split("\\|"); Glide.with(mainActivity).load(picUrl[0]).into(xRecViewHolder.iv); } @Override public int getItemCount() { return bjbList != null ? bjbList.size() : 0; } class XRecViewHolder extends RecyclerView.ViewHolder { private final ImageView iv; private final TextView titel; private final TextView yj; private final TextView xj; public XRecViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.xRecView_itemsj_iv); titel = itemView.findViewById(R.id.xRecView_itemsj_titel); yj = itemView.findViewById(R.id.xRecView_itemsj_yuanJia); xj = itemView.findViewById(R.id.xRecView_itemsj_xianJia); } } }

第二个XRecAdapterSJ类

  1. public class XRecAdapterSJ extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  2. private List<SJBean.DataBean> sjList;
  3. private MainActivity mainActivity;
  4. public XRecAdapterSJ(List<SJBean.DataBean> sjList, MainActivity mainActivity) {
  5. this.mainActivity = mainActivity;
  6. this.sjList = sjList;
  7. }
  8. @Override
  9. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  10. View view = View.inflate(mainActivity,R.layout.xrecview,null);
  11. XRecViewHolder xRecViewHolder = new XRecViewHolder(view);
  12. return xRecViewHolder;
  13. }
  14. @Override
  15. public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  16. XRecViewHolder xRecViewHolder = (XRecViewHolder) holder;
  17. xRecViewHolder.titel.setText(sjList.get(position).getTitle());
  18. xRecViewHolder.yj.setText(sjList.get(position).getBargainPrice()+"");
  19. xRecViewHolder.xj.setText(sjList.get(position).getPrice()+"");
  20. String[] picUrl = sjList.get(position).getImages().split("\\|");
  21. Glide.with(mainActivity).load(picUrl[0]).into(xRecViewHolder.iv);
  22. }
  23. @Override
  24. public int getItemCount() {
  25. return sjList != null ? sjList.size() : 0;
  26. }
  27. class XRecViewHolder extends RecyclerView.ViewHolder {
  28. private final ImageView iv;
  29. private final TextView titel;
  30. private final TextView yj;
  31. private final TextView xj;
  32. public XRecViewHolder(View itemView) {
  33. super(itemView);
  34. iv = itemView.findViewById(R.id.xRecView_itemsj_iv);
  35. titel = itemView.findViewById(R.id.xRecView_itemsj_titel);
  36. yj = itemView.findViewById(R.id.xRecView_itemsj_yuanJia);
  37. xj = itemView.findViewById(R.id.xRecView_itemsj_xianJia);
  38. }
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Grid网格布局

    简介 > Flex布局时一维的布局,即水平或垂直方向的布局。而Grid布局则划分成“行”和“列”,产生单元格,可以看作是二维的布局。Grid布局远比Flex布局强大