Android Okhttp工具类的封装
来源:互联网 发布:s7200编程视频 编辑:程序博客网 时间:2024/05/17 22:12
//OKhttp工具类
public class Httputils { private OkHttpClient client; private CallbackData callbackdata; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: // String str=(String) msg.obj; callbackdata.success(msg.obj); } } }; //请求网络 public <T>void getloadDemo(String url,final CallbackData callback,final Class<T> tClass){ this.callbackdata = callback; client=new OkHttpClient.Builder() .readTimeout(3000, TimeUnit.MILLISECONDS) .writeTimeout(3000, TimeUnit.MILLISECONDS) .connectTimeout(3000, TimeUnit.MILLISECONDS) .build(); Request request = new Request.Builder().url(url).build(); okhttp3.Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { callback.error(500,e.getMessage()); } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { Message message = handler.obtainMessage(); message.what=0; Gson gson=new Gson(); T t=gson.fromJson(response.body().string(),tClass); message.obj=t; handler.sendMessage(message); } }); }}
-----------------------------------------------------
//所需的接口
public interface CallbackData<T> { void success(T str); void error(int code, String message);}------------------------------------------------
//Presenter类的封装
public class PresenterBean <T> { //找Model拿到请求数据 Presenter和Model的交互需要接口 private final Httputils httpUtils; private ImainView mimainView; public PresenterBean(ImainView imainView) { this.mimainView=imainView; httpUtils=new Httputils(); } //将PresenterData抽成一个类 简化后的结果 public void loadDataFromServer(String url, Class<T> t,final int code){ httpUtils.getloadDemo(url, new CallbackData<T>() { @Override public void success(T str) { mimainView.successCallback(str,code); } @Override public void error(int code, String message) { mimainView.errorCallback(code,message); } },t); }}----------------------------------------------------
public interface ImainView <T>{ void successCallback(T str,int code); void errorCallback(int code, String message);}------------------------------------------------------//RecyclerView自定义点击事件
public class RecyclerLiserner { //点击监听 参数为view 和 position public interface onItemClickListener{ void onItemClick(View v, int position); } //长按监听 public interface onItemLongClickListener{ void onLongClick(View v, int positener); }}------------------------------------------------------------------------------------------------------public class LiebiaoAdapter extends RecyclerView.Adapter<LiebiaoAdapter.Viewholder>implements View.OnClickListener{ private Context context; private List<Liebiao.DatasBean.ClassListBean>mData=new ArrayList<>(); private Viewholder viewholder; private Boolean isClicks=true; private LayoutInflater mInflater; private RecyclerLiserner.onItemClickListener listener; public LiebiaoAdapter(Context context) { this.context = context; } public void setData(List<Liebiao.DatasBean.ClassListBean> data){ if (data!=null){ mData.addAll(data); } } //提供设置接口回调的方法 public void onItemClickListener(RecyclerLiserner.onItemClickListener listener){ this.listener=listener; } //因为ViewHolder我们可以拿到每个Item的根布局,所以如果我们为根布局设置单独的OnClick监听 // 并将其开放给Adapter, // 那 不就可以在组装RecyclerView时就能够设置ItemClickListener, // 只不过这个Listener不是设置到RecyclerView上而是设置到Adapter。 @Override public Viewholder onCreateViewHolder(ViewGroup parent, int viewType){ View view = View.inflate(context, R.layout.liebiaotu, null); view.setOnClickListener(this); viewholder = new Viewholder(view); return viewholder; } @Override public void onBindViewHolder(Viewholder holder, final int position){ Viewholder myHolder = (Viewholder) holder; myHolder.itemView.setTag(position); viewholder.liebiaziti.setText(mData.get(position).getGc_name()); Glide.with(context).load("http://192.168.56.1/data/upload/mobile/category/05015382063902705.png") .error(R.drawable.ic_action_back) .placeholder(R.drawable.ic_item_goods) .into(viewholder.liebiaotu); System.out.println("myHolder = " + mData.get(position).getImage()); //x.image().bind(viewholder.liebiaotu,mData.get(position).getImage()); } @Override public int getItemCount() { return mData.size(); } @Override public void onClick(View v) { if (listener!=null){ listener.onItemClick(v, (Integer) v.getTag()); } } class Viewholder extends RecyclerView.ViewHolder{ private final ImageView liebiaotu; private TextView liebiaziti; public Viewholder(View itemView) { super(itemView); liebiaotu= (ImageView) itemView.findViewById(R.id.liebiaotu); liebiaziti= (TextView) itemView.findViewById(R.id.liebiaziti); } }}
//为recyclerView设置布局控制器 LinearLayoutManager manager=new LinearLayoutManager(this, LinearLayout.VERTICAL,false); recyclerView.setLayoutManager(manager); //网格视图 GridLayoutManager gridLayoutManager=new GridLayoutManager(this,3,GridLayoutManager.VERTICAL,false); recyclerView.setLayoutManager(gridLayoutManager); //瀑布流 StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(staggeredGridLayoutManager);
阅读全文
0 0
- Android Okhttp工具类的封装
- Okhttp工具类封装
- Okhttp封装工具类
- 封装OkHttp工具类
- okhttp封装工具类
- 封装OKHttp,工具类
- 非常简单的OKhttp封装工具类
- okhttp传输封装的工具类
- Android OkHttp的封装
- OKhttp二次封装工具类
- OKHttp的封装类
- OKhttp的封装工具类(可以直接使用)
- 超简单的okhttp封装工具类(上)
- 自己简单的封装一个OKHttp工具类
- Android OKHttp的高度封装
- android OkHttp工具类
- OkHttp网络连接封装工具类
- OkHttp网络连接封装工具类
- 利用numpy和pandas处理csv文件中的时间
- C#虚基类继承与接口的区别
- unity3d调用windows系统dialog选择文件夹的方法
- cannot be read or is not a valid ZIP file
- 25-总结-【cartographer源码分析】系列的第三部分【sensor源码分析】
- Android Okhttp工具类的封装
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 剑指offer 之 两个栈来实现一个队列
- Material Design控件使用(二)
- 设计模式第七种原则
- 毛驴和萝卜问题
- AI“末世论” To Be or Not to Be?
- 当UILabel 中的内容太长情况下的设置
- CodeForces 519D A and B and Interesting Substrings 前缀和