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() {
//创建一个主线程的handler
mHandler = 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() {
@Override
public void onFailure(Call call, final IOException e) {
if (okCallback != null) {
//切换到主线程
mHandler.post(new Runnable() {
@Override
public void run() {
okCallback.onFailure(e);
}
});
}
}
@Override
public 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() {
@Override
public 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() {
@Override
public void onFailure(Call call, final IOException e) {
if (okCallback != null) {
//切换到主线程
mHandler.post(new Runnable() {
@Override
public void run() {
okCallback.onFailure(e);
}
});
}
}
@Override
public 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() {
@Override
public 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;
@Override
protected 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() {
@Override
public void onFailure(Exception e) {
}
@Override
public 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() {
@Override
public 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() {
@Override
public void onFailure(Exception e) {
}
@Override
public 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() {
@Override
public 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
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
viewHolder.textview.setText(mDataBeans.get(i).getName());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnClicklistener.cid(mDataBeans.get(i).getCid()+"");
}
});
}
@Override
public 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
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item_you, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public 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() {
@Override
public void onClick(View v) {
mOnsssCliclinstener.pscid(mListBeans.get(i).getPscid()+"");
}
});
}
@Override
public 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;
@Override
protected 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.RecyclerView
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"
android:id="@+id/recyclerview"/>
<ScrollView
android:layout_width="0dp"
android:layout_weight="5"
android:layout_height="match_parent"
android:id="@+id/scrollView">
<LinearLayout
android: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">
<TextView
android: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">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/image"/>
<TextView
android: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">
<TextView
android: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;
}
}
}
}