OkHttp的封装
类名OkhtttpUtils

package likuo.bwie.com.fenlei;import android.os.Handler;
import android.os.Looper;import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkhtttpUtils {private static OkhtttpUtils mOkhtttpUtils;private OkHttpClient mOkHttpClien;private final Handler mHandler;private OkhtttpUtils() {//创建一个主线程的handlermHandler = new Handler(Looper.getMainLooper());/* LoggingInterceptor loggingInterceptor = new LoggingInterceptor();*/mOkHttpClien = new OkHttpClient.Builder()/* .addInterceptor(loggingInterceptor)*/.connectTimeout(5000, TimeUnit.MILLISECONDS).readTimeout(5000, TimeUnit.MILLISECONDS).writeTimeout(5000, TimeUnit.MILLISECONDS).build();}//单例模式public static OkhtttpUtils getInstance() {if (mOkhtttpUtils == null) {synchronized (OkhtttpUtils.class) {if (mOkhtttpUtils == null) {return mOkhtttpUtils = new OkhtttpUtils();}}}return mOkhtttpUtils;}public interface OkCallback {void onFailure(Exception e);void onResponse(String json);}public void doPost(String url, Map<String, String> map, final OkCallback okCallback) {//创建FormBody的对象,把表单添加到formBody中FormBody.Builder builder = new FormBody.Builder();if (map != null) {for (String key : map.keySet()) {builder.add(key, map.get(key));}}FormBody formBody = builder.build();//创建Request对象Request request = new Request.Builder().post(formBody).url(url).build();//创建Call对象final Call call = mOkHttpClien.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, final IOException e) {if (okCallback != null) {//切换到主线程mHandler.post(new Runnable() {@Overridepublic void run() {okCallback.onFailure(e);}});}}@Overridepublic void onResponse(Call call, final Response response) throws IOException {try {if (response != null && response.isSuccessful()) {final String json = response.body().string();mHandler.post(new Runnable() {@Overridepublic void run() {if (okCallback != null) {okCallback.onResponse(json);return;}}});}} catch (IOException e) {e.printStackTrace();}if (okCallback != null) {okCallback.onFailure(new Exception("网络异常"));}}});}//封装doGet的网络请求public void doGet(String url, final OkCallback okCallback) {Request request = new Request.Builder().get().url(url).build();final Call call = mOkHttpClien.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, final IOException e) {if (okCallback != null) {//切换到主线程mHandler.post(new Runnable() {@Overridepublic void run() {okCallback.onFailure(e);}});}}@Overridepublic void onResponse(Call call, final Response response) throws IOException {try {if (response != null && response.isSuccessful()) {final String json = response.body().string();mHandler.post(new Runnable() {@Overridepublic void run() {if (okCallback != null) {okCallback.onResponse(json);return;}}});}} catch (IOException e) {e.printStackTrace();}}});}
}

MainActivity的代码

package likuo.bwie.com.fenlei;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;import com.google.gson.Gson;import java.util.HashMap;
import java.util.List;import likuo.bwie.com.fenlei.adapter.BMyAdapter;
import likuo.bwie.com.fenlei.adapter.MyAdapter;
import likuo.bwie.com.fenlei.bean.Beans;
import likuo.bwie.com.fenlei.bean.Person;
import likuo.bwie.com.fenlei.persenter.onClicklistener;
import likuo.bwie.com.fenlei.persenter.onsssCliclinstener;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerview;String url = "http://www.zhaoapi.cn/product/getCatagory";String urlyou = "http://www.zhaoapi.cn/product/getProductCatagory";String ccid = "";MyAdapter mMyAdapter;private ScrollView scrollView;private LinearLayout linear;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mMyAdapter = new MyAdapter(this);initData();recyclerview.setAdapter(mMyAdapter);}private void initData() {OkhtttpUtils.getInstance().doGet(url, new OkhtttpUtils.OkCallback() {@Overridepublic void onFailure(Exception e) {}@Overridepublic void onResponse(String json) {Person person = new Gson().fromJson(json, Person.class);List<Person.DataBean> data = person.getData();mMyAdapter.setdata(data);mMyAdapter.setOnClicklistener(new onClicklistener() {@Overridepublic void cid(String cid) {ccid = cid;Log.e("lk", cid);initAdata();}});}});}private void initAdata() {HashMap<String, String> hashMap = new HashMap<>();hashMap.put("cid", ccid);OkhtttpUtils.getInstance().doPost(urlyou, hashMap, new OkhtttpUtils.OkCallback() {@Overridepublic void onFailure(Exception e) {}@Overridepublic void onResponse(String json) {BMyAdapter mBMYAdapter;Beans beans = new Gson().fromJson(json, Beans.class);List<Beans.DataBean> data = beans.getData();/*Log.e("lkss",data.get(0).getName());*/linear.removeAllViews();for (int i = 0; i < data.size(); i++) {Beans.DataBean dataBean = data.get(i);List<Beans.DataBean.ListBean> list = dataBean.getList();mBMYAdapter = new BMyAdapter(MainActivity.this);TextView textView = new TextView(MainActivity.this, null, 0);textView.setText(dataBean.getName());RecyclerView mRecycler = new RecyclerView(MainActivity.this,null,0);mRecycler.setLayoutManager(new GridLayoutManager(MainActivity.this,3));mBMYAdapter.reset(list);mRecycler.setAdapter(mBMYAdapter);mBMYAdapter.setOnsssCliclinstener(new onsssCliclinstener() {@Overridepublic void pscid(String pscid) {Log.e("lk",pscid);Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("ppp",pscid);startActivity(intent);}});mBMYAdapter.notifyDataSetChanged();linear.addView(textView);linear.addView(mRecycler);}}});}private void initView() {recyclerview = (RecyclerView) findViewById(R.id.recyclerview);recyclerview.setLayoutManager(new LinearLayoutManager(this, OrientationHelper.VERTICAL, false));scrollView = (ScrollView) findViewById(R.id.scrollView);linear = (LinearLayout) findViewById(R.id.linear);}
}

左边栏的adapter

package likuo.bwie.com.fenlei.adapter;import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;import likuo.bwie.com.fenlei.R;
import likuo.bwie.com.fenlei.bean.Person;
import likuo.bwie.com.fenlei.persenter.onClicklistener;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {Context context;List<Person.DataBean> mDataBeans;public MyAdapter(Context context) {this.context = context;mDataBeans = new ArrayList<>();}public void setdata(List<Person.DataBean> data) {mDataBeans.clear();mDataBeans.addAll(data);notifyDataSetChanged();}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = View.inflate(context, R.layout.item, null);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {viewHolder.textview.setText(mDataBeans.get(i).getName());viewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnClicklistener.cid(mDataBeans.get(i).getCid()+"");}});}@Overridepublic int getItemCount() {return mDataBeans.size();}public class ViewHolder extends RecyclerView.ViewHolder {private TextView textview;public ViewHolder(@NonNull View itemView) {super(itemView);textview = itemView.findViewById(R.id.textview);}}private onClicklistener mOnClicklistener;public void setOnClicklistener(onClicklistener onClicklistener) {mOnClicklistener = onClicklistener;}
}

右边栏的adapter

package likuo.bwie.com.fenlei.adapter;import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;import java.util.ArrayList;
import java.util.List;import likuo.bwie.com.fenlei.MainActivity;
import likuo.bwie.com.fenlei.R;
import likuo.bwie.com.fenlei.bean.Beans;
import likuo.bwie.com.fenlei.persenter.onsssCliclinstener;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public class BMyAdapter extends RecyclerView.Adapter<BMyAdapter.ViewHolder> {Context context;List<Beans.DataBean.ListBean> mListBeans;public BMyAdapter(Context context) {this.context = context;mListBeans = new ArrayList<>();}public void reset(List<Beans.DataBean.ListBean> list) {mListBeans.clear();mListBeans.addAll(list);notifyDataSetChanged();}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = View.inflate(context, R.layout.item_you, null);ViewHolder viewHolder = new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {Glide.with(context).load(mListBeans.get(i).getIcon()).into(viewHolder.image);viewHolder.textview1.setText(mListBeans.get(i).getName());viewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnsssCliclinstener.pscid(mListBeans.get(i).getPscid()+"");}});}@Overridepublic int getItemCount() {return mListBeans.size();}public class ViewHolder extends RecyclerView.ViewHolder {ImageView image;TextView textview1;public ViewHolder(@NonNull View itemView) {super(itemView);image = itemView.findViewById(R.id.image);textview1 = itemView.findViewById(R.id.textview1);}}/*public interface onsssCliclinstener{void pscid(String pscid);}*/private onsssCliclinstener mOnsssCliclinstener;public void setOnsssCliclinstener(onsssCliclinstener onsssCliclinstener) {mOnsssCliclinstener = onsssCliclinstener;}
}

左边传值时用的接口

package likuo.bwie.com.fenlei.persenter;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public interface onClicklistener {void cid(String cid);
}

右边传值用的接口

package likuo.bwie.com.fenlei.persenter;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public interface onsssCliclinstener {void pscid(String pscid);
}

SecondActivity就是只显示了传的值

package likuo.bwie.com.fenlei;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;public class SecondActivity extends AppCompatActivity {private TextView text11;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initView();Intent intent = getIntent();String ppp = intent.getStringExtra("ppp");text11.setText(ppp);}private void initView() {text11 = (TextView) findViewById(R.id.text11);}
}

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"tools:context=".MainActivity"android:orientation="horizontal"><android.support.v7.widget.RecyclerViewandroid:layout_width="0dp"android:layout_weight="2"android:layout_height="match_parent"android:id="@+id/recyclerview"/><ScrollViewandroid:layout_width="0dp"android:layout_weight="5"android:layout_height="match_parent"android:id="@+id/scrollView"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/linear"android:orientation="vertical"></LinearLayout></ScrollView>
</LinearLayout>

左边需要的子条目的布局

<?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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/textview"android:textSize="35sp"/>
</LinearLayout>

右边条目的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"><ImageViewandroid:layout_width="80dp"android:layout_height="80dp"android:id="@+id/image"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/textview1"/>
</LinearLayout>

second的布局

<?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=".SecondActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/text11"android:textSize="80sp"/></LinearLayout>

person是左半边的

package likuo.bwie.com.fenlei.bean;import java.util.List;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public class Person {private String msg;private String code;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 List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}public static class DataBean {private int cid;private String createtime;private String icon;private int ishome;private String name;public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}public String getCreatetime() {return createtime;}public void setCreatetime(String createtime) {this.createtime = createtime;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public int getIshome() {return ishome;}public void setIshome(int ishome) {this.ishome = ishome;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
}

bean是右边的

package likuo.bwie.com.fenlei.bean;import java.util.List;/*** date:2018/11/22* author:李阔(淡意衬优柔)* function:*/
public class Beans {private String msg;private String code;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 List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}public static class DataBean {private String cid;private String name;private String pcid;private List<ListBean> list;public String getCid() {return cid;}public void setCid(String cid) {this.cid = cid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPcid() {return pcid;}public void setPcid(String pcid) {this.pcid = pcid;}public List<ListBean> getList() {return list;}public void setList(List<ListBean> list) {this.list = list;}public static class ListBean {/*** icon : http://120.27.23.105/images/icon.png* name : 月饼* pcid : 1* pscid : 1*/private String icon;private String name;private int pcid;private int pscid;public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPcid() {return pcid;}public void setPcid(int pcid) {this.pcid = pcid;}public int getPscid() {return pscid;}public void setPscid(int pscid) {this.pscid = pscid;}}}
}

简单的网络数据++分类++封装OkHttp相关推荐

  1. AutoCompleteTextView+Okhttp3+ListView实现简单的网络数据搜索展示

    首先用OKHttp3获取网络上的数据,并保存到Serializeable的Bean类集合 OkHttpClient client = new OkHttpClient();Request reques ...

  2. 网络数据包封装/解封装

    数据的发送和接收其实就是封装及解封装的过程. 协议栈逐层向下传递数据,并添加报文头部和报文尾部的过程称为封装.反过来就是解封装. 封装过程 封装过程:上层原始数据→数据段(segment)→数据包(p ...

  3. 新手必看篇!3种简单的网络数据抓取

    3种抓取其中数据的方法.首先是正则表达式,然后是流行的BeautifulSoup模块,最后是强大的lxml模块. 1 正则表达式 当我们使用正则表达式抓取国家(或地区)面积数据时,首先需要尝试匹配`` ...

  4. 模仿Retrofit封装一个使用更简单的网络请求框架

    本文已授权微信公众号:郭霖  在微信公众号平台原创首发.会用Retrofit了?你也能自己动手写一个! 前言 想封装一套网络请求,不想直接上来就用别人写好的,或者说对项目可以更好的掌控,所以自己模仿着 ...

  5. Xamarin.Android之封装个简单的网络请求类

    http://doc.okbase.net/catcher1994/archive/220195.html Catcher8 2016/4/23 0:28:50 阅读(72) 评论(0) 一.前言 回 ...

  6. 安卓 原生okhttp使用get与post获取网络数据

    网址 https://square.github.io/okhttp/ 配置 依赖 在module的build.gradle中: implementation 'com.squareup.okhttp ...

  7. matlab 创建简单的深度学习网络用于分类

    matlab 2018以上版本.如果不是2018以上版本,需要单独安装工具箱Deep learning toolbox 此示例说明如何创建和训练简单的卷积神经网络来进行深度学习分类.卷积神经网络是深度 ...

  8. 一个最简单的通过WireShark破解SSL加密网络数据包的方法

    原文地址: http://article.yeeyan.org/view/530101/444688 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的 ...

  9. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

最新文章

  1. MapReduce程序的运行全貌
  2. 开源矿工README
  3. linux环境下安装PHP中间件ICE(二)
  4. Andorid之taskAffinity 和 FLAG_ACTIVITY_NEW_TASK
  5. Hi3518编译器安装
  6. 厉害!这位80后连发2篇Science!身处普通高校,告诉你科研不决取于平台
  7. 整理的3500个常用汉字的调用字典
  8. GPU Architect Functional Verification
  9. 光学相干断层成像术(OCT)
  10. 计算机不显示用户组密码设置,手把手教你设置win10系统开机时跳过锁屏画面直接显示密码框登录界面-系统操作与应用 -亦是美网络...
  11. php字符串中删除字符串函数,PHP实现删除字符串中任何字符的函数
  12. centos7.0 配置mysql_Centos7.0配置MySQL主从服务器
  13. arcgis删除栅格数据波段_Web GIS课程7.2 栅格数据的概念及类型
  14. 计算机固态硬盘安装,电脑安装了固态硬盘,需要如何重装系统?详细的方法教程在这里!...
  15. 优米网:20部电影,哈佛商学院学生必看   下载地址
  16. ubuntu 16.04和window双系统 启动项顺序修改
  17. STK航空仿真(一)界面配置和插入模型
  18. Pr 入门教程之如何创建新序列?
  19. JavaFx界面功能隐藏和禁用
  20. Mac:当iPhone连接苹果电脑时,自动弹出照片的解决方案

热门文章

  1. UI设计之logo制作基本方法
  2. 抖音蓝V号如何在企业首页添加联系方式?解读详细的设置流程
  3. 酷家乐前端开发工程师一面
  4. 2006年元宵节前喜得贵子,真高兴,呵呵 ^_^
  5. 测试人真实面试经历:十面阿里,七面头条,六个Offer
  6. 采集页面之后css布局混乱之rem适配布局
  7. html、css、js粒子特效——前端
  8. 初识C语言————3
  9. harmonyos演示,HarmonyOS 2.0 跨屏演示:手机编辑内容跨到平板,自动优化排版
  10. 什么是独享锁/共享锁_java培训