封装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);}
阅读全文
0 0
- 封装okHttp 上下刷新
- iOS项目中的网络请求和上下拉刷新封装
- okhttp封装okhttp-utils
- 封装OKHttp
- 封装OkHttp
- okhttp封装
- 封装OKHttp
- 封装OKHttp
- Okhttp封装
- OkHttp 封装
- OkHttp封装
- OKHttp封装
- Okhttp封装
- okHttp封装
- OkHttp封装
- Okhttp封装
- 封装okhttp
- okhttp封装
- iOS开发中的九宫格布局
- LintCode-(1)A + B 问题
- List、Set、Map的区别
- redisUtil
- H5分享带缩略图,描述,微信内分享到好友,朋友圈等
- 封装okHttp 上下刷新
- java插入排序代码实现
- 全选/反选;删除
- C/C++:交换两个变量的值可能存在的问题
- 【1701H1】【穆晨】【171113】连续第三十四天总结
- 数据结构之队列
- java运算符
- 拷贝文件代码
- 慕课网——PHP进阶篇(正则表达式5—8)