Android Okhttp工具类的封装

//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拿到请求数据 PresenterModel的交互需要接口
    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值