封装okHttp 上下刷新

来源:互联网 发布:eastpak知乎 编辑:程序博客网 时间:2024/05/22 16:03
//封装Ok
package com.example.x;import android.os.Handler;import java.io.IOException;import java.util.Map;import android.os.Handler;import android.util.Log;import com.google.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by 壹颗大金星 on 2017/11/9. */public class HttpUtils {    private static volatile HttpUtils instance;    private static Handler handler = new Handler();    private HttpUtils(){    }    public static HttpUtils getInstance() {        if (instance == null) {            synchronized (HttpUtils.class) {                if (instance == null) {                    instance = new HttpUtils();                }            }        }        return instance;    }    //get请求    public void get(String url, Map<String,String> map, final CallBack callBack, final Class c){        //对url和参数做拼接处理        StringBuffer stringBuffer = new StringBuffer();        stringBuffer.append(url);        //判断是否存在?   if中是存在        if(stringBuffer.indexOf("?")!=-1 ){            //判断?是否在最后一位    if中是不在最后一位            if(stringBuffer.indexOf("?")!=stringBuffer.length()-1){                stringBuffer.append("&");            }        }else{            stringBuffer.append("?");        }        for(Map.Entry<String,String> entry:map.entrySet()){            stringBuffer.append(entry.getKey())                    .append("=")                    .append(entry.getValue())                    .append("&");        }        //判断是否存在&   if中是存在        if(stringBuffer.indexOf("&")!=-1){            stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));        }        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient.Builder()                .addInterceptor(new LoggingInterceptor())                .build();        //2:创建Request对象        final Request request = new Request.Builder()                .get()                .url(stringBuffer.toString())                .build();        //3:创建Call对象        Call call = okHttpClient.newCall(request);        //4:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess(o);                    }                });            }        });    }    //post请求    public void post(String url, Map<String,String> map, final CallBack callBack, final Class c){        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient();        //2:提供post请求需要的body对象        FormBody.Builder builder = new FormBody.Builder();        for(Map.Entry<String,String> entry:map.entrySet()){            builder.add(entry.getKey(),entry.getValue());        }        FormBody body = builder.build();        //3:创建Request对象        final Request request = new Request.Builder()                .post(body)                .url(url)                .build();        //4:创建Call对象        Call call = okHttpClient.newCall(request);        //5:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess(o);                    }                });            }        });    }}
//MainActivity
package com.example.x;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import com.jcodecraeer.xrecyclerview.ProgressStyle;import com.jcodecraeer.xrecyclerview.XRecyclerView;imort java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    private XRecyclerView xrv;    private int i;    private XRaDAPTER adapter;    private List<Bean.SongListBean> list;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        xrv =(XRecyclerView)findViewById(R.id.xrv);        //设置上拉        xrv.setPullRefreshEnabled(true);        xrv.setLoadingMoreEnabled(true);        xrv.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);        xrv.setLaodingMoreProgressStyle(ProgressStyle.BallClipRotate);//        loaddata(0);        //设置监听        xrv.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        i=0;                        list.clear();                        loaddata(i);                        adapter.notifyDataSetChanged();                        xrv.refreshComplete();                    }                },3000);            }            @Override            public void onLoadMore() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        i++;                        loaddata(i);                        list.addAll(list);                        xrv.loadMoreComplete();                    }                },3000);            }        });        //创建数据集合        loaddata(i);    }    private void loaddata(int i){        Map<String, String> map = new HashMap<>();        HttpUtils.getInstance().get("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=" + i, map, new CallBack() {            @Override            public void onSuccess(Object o) {                Bean bean=(Bean) o;                list = bean.getSong_list();                //添加适配器                adapter = new XRaDAPTER(MainActivity.this, list);                xrv.setAdapter(adapter);                LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);                xrv.setLayoutManager(manager);            }            @Override            public void onFailed(Exception e) {            }        },Bean.class);    }}

//recyclerview 适配器
package com.example.x;import android.content.Context;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.List;/** * Created by on 2017/11/12. */public class XRaDAPTER extends RecyclerView.Adapter<XRaDAPTER.ViewHolder> {    private Context context;    private List<Bean.SongListBean>  list;    public XRaDAPTER(Context context, List<Bean.SongListBean> list) {        this.context = context;        this.list = list;    }    class ViewHolder extends RecyclerView.ViewHolder{        private final ImageView img;        private final TextView tv;        public ViewHolder(View itemView) {            super(itemView);            img =(ImageView)itemView.findViewById(R.id.img);            tv=(TextView)itemView.findViewById(R.id.tv);        }    }    @Override    public XRaDAPTER.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View inflate = View.inflate(context, R.layout.item, null);        ViewHolder holder = new ViewHolder(inflate);        return holder;    }    @Override    public void onBindViewHolder(XRaDAPTER.ViewHolder holder, int position) {        Glide.with(context).load(list.get(position).getPic_big()).into(holder.img);        holder.tv.setText(list.get(position).getTitle());    }    @Override    public int getItemCount() {        return list.size();    }}
public interface CallBack {    void onSuccess(Object o);    void onFailed(Exception e);}