简单的网络数据++分类++封装OkHttp

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;
            }
        }
    }
}

你可能感兴趣的:(简单的网络数据++分类++封装OkHttp)