您的位置:首页 > 理论基础 > 计算机网络

OkHttp3请求数据,用Recyclerview展示数据

2018-01-27 14:08 585 查看
一、导依赖、权限
//    recyclerview的依赖库
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
//OkHttp3的依赖
compile 'com.squareup.okhttp3:okhttp:3.3.0'
//gson依赖
compile 'com.google.code.gson:gson:2.6.2'
//图片加载glide依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
<uses-permission android:name="android.permission.INTERNET"/>
二 、布局文件1、activity_main
<?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="com.bwie.wyy.recyclerview.MainActivity">

<FrameLayoutandroid:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="商品列表界面"
android:textSize="25sp" />

<ImageView
android:id="@+id/change"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="right"
android:src="@drawable/kind_grid" />
</FrameLayout>

<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="#F00" />

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

</LinearLayout>
2、item_horizontal
<?xml version="1.0" encoding="utf-8"[/b]?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:id="@+id/item_icon"android:layout_width="100dp"android:layout_height="100dp"android:src="@mipmap/ic_launcher" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:singleLine="true"android:text="商品名"android:textSize="25sp" /><TextViewandroid:id="@+id/price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="价格"android:textColor="#F00" /></LinearLayout></LinearLayout>
三、OKHttpUtils类
package com.bwie.wyy.recyclerview.utils;import android.os.Handler;import android.os.Message;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/*** Created by gjl on 2018/1/25.*/public class OKHttpUtils {//    http://120.27.23.105/product/getProducts?pscid=39&page=1 //单利模式,获取对象private static OKHttpUtils okHttpUtils = null;private MyHandler myHandler = new MyHandler();private OkLoadListener okLoadListener;public static OKHttpUtils getInstance() {if (okHttpUtils == null) {okHttpUtils = new OKHttpUtils();}return okHttpUtils;}//get请求public void okGet(String url, String pscid, String page) {//创建OK对象OkHttpClient okHttpClient = new OkHttpClient();//创建请求对象String url1 = url + "?pscid=" + pscid + "&page=" + page;Request request = new Request.Builder().url(url1).build();//创建请求队列Call call = okHttpClient.newCall(request);//执行,异步请求call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Message message = myHandler.obtainMessage();message.what = 0;message.obj = e.getMessage();myHandler.sendMessage(message);}@Overridepublic void onResponse(Call call, Response response) throws IOException {Message message = myHandler.obtainMessage();message.what = 1;message.obj = response.body().string();myHandler.sendMessage(message);}});}//处理线程class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {//处理消息switch (msg.what) {//失败case 0:String error = (String) msg.obj;okLoadListener.loadError(error);break;//成功case 1:String json = (String) msg.obj;okLoadListener.loadSuccess(json);break;}}}//接口回调//定义接口,public interface OkLoadListener {//定义方法void loadSuccess(String json);void loadError(String error);}//定义一个方法,共外部调用public void setOkLoadListener(OkLoadListener okLoadListener) {this.okLoadListener = okLoadListener;}}
四、GoodListBean类
package com.bwie.wyy.recyclerview.Bean;import java.util.List;/*** Created by gjl on 2018/1/25.*/public class GoodListBean {private String msg;private String code;private String page;private List<DataBean> data;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getPage() {return page;}public void setPage(String page) {this.page = page;}public List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}public static class DataBean {private double bargainPrice;private String createtime;private String detailUrl;private String images;private int itemtype;private int pid;private int price;private int pscid;private int salenum;private int sellerid;private String subhead;private String title;public double getBargainPrice() {return bargainPrice;}public void setBargainPrice(double bargainPrice) {this.bargainPrice = bargainPrice;}public String getCreatetime() {return createtime;}public void setCreatetime(String createtime) {this.createtime = createtime;}public String getDetailUrl() {return detailUrl;}public void setDetailUrl(String detailUrl) {this.detailUrl = detailUrl;}public String getImages() {return images;}public void setImages(String images) {this.images = images;}public int getItemtype() {return itemtype;}public void setItemtype(int itemtype) {this.itemtype = itemtype;}public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getPscid() {return pscid;}public void setPscid(int pscid) {this.pscid = pscid;}public int getSalenum() {return salenum;}public void setSalenum(int salenum) {this.salenum = salenum;}public int getSellerid() {return sellerid;}public void setSellerid(int sellerid) {this.sellerid = sellerid;}public String getSubhead() {return subhead;}public void setSubhead(String subhead) {this.subhead = subhead;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}}
五、MyAdapter
package com.bwie.wyy.recyclerview.Adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.bwie.wyy.recyclerview.Bean.GoodListBean;import com.bwie.wyy.recyclerview.R;import java.util.List;/*** 强制使用ViewHolder*  服用控件*/public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private static final String TAG = "MyAdapter";private final Context context;private final List<GoodListBean.DataBean> list;public MyAdapter(Context context, List<GoodListBean.DataBean> list){this.context = context;this.list = list;}//当床架ViewHolder时候调用,创建ViewHolder@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = View.inflate(context, R.layout.item_horizontal,null);MyViewHolder myViewHolder = new MyViewHolder(view);return myViewHolder;}//onBindViewHolder 关联ViewHOlder  设置数据使用@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {//图片设置到ImageView里面GlideString images = list.get(position).getImages();String image0_url = images.split(".jpg")[0] + ".jpg";Log.d(TAG, "----" + image0_url);//使用Glide加载图片Glide.with(context).load(image0_url).into(holder.getIcon());//设置商品名字和价格holder.getTitle().setText(list.get(position).getTitle());holder.getPrice().setText("价格为:"+list.get(position).getPrice());}//条目数量@Overridepublic int getItemCount() {return list.size();}class MyViewHolder extends RecyclerView.ViewHolder{private final ImageView icon;private final TextView title;private final TextView price;public MyViewHolder(View itemView) {//            itemView就是条目布局文件super(itemView);//找到控件,条目里面的icon = itemView.findViewById(R.id.item_icon);title = itemView.findViewById(R.id.title);price = itemView.findViewById(R.id.price);}public ImageView getIcon() {return icon;}public TextView getTitle() {return title;}public TextView getPrice() {return price;}}}
六、Main_activity
package com.bwie.wyy.recyclerview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.View;import android.widget.ImageView;import com.bwie.wyy.recyclerview.Adapter.MyAdapter;import com.bwie.wyy.recyclerview.Bean.GoodListBean;import com.bwie.wyy.recyclerview.utils.OKHttpUtils;import com.google.gson.Gson;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener, OKHttpUtils.OkLoadListener {private String goods_list_url = "http://120.27.23.105/product/getProducts";private ImageView change;private RecyclerView recyclerView;private static final String TAG = "MainActivity----";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化界面initViews();//初始化数据  OKHttpOKHttpUtils okHttpUtils = OKHttpUtils.getInstance();okHttpUtils.okGet(goods_list_url, "39", "1");okHttpUtils.setOkLoadListener(this);//逻辑//        将数据显示到RecylerView里面}private void initViews() {change = findViewById(R.id.change);change.setOnClickListener(this);recyclerView = findViewById(R.id.recyclerview);//设置布局管理器,recyclerView.setLayoutManager(new LinearLayoutManager(this));}//开关private boolean flag = true;@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.change:if (flag){//切换成gridviewrecyclerView.setLayoutManager(new GridLayoutManager(this,2));}else {//切换成listviewrecyclerView.setLayoutManager(new LinearLayoutManager(this));}flag=!flag;break;}}//接口回调的方法@Overridepublic void loadSuccess(String json) {Log.d(TAG, "loadSuccess() returned: " + json);//将json---对象list//GsonGson gson = new Gson();GoodListBean goodListBean = gson.fromJson(json, GoodListBean.class);List<GoodListBean.DataBean> list = goodListBean.getData();//将数据放入ReyclerViewMyAdapter adapter = new MyAdapter(this, list);recyclerView.setAdapter(adapter);}@Overridepublic void loadError(String error) {Log.d(TAG, "loadError() returned: " + error);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: