OkHttpClient请求网络数据

点击事件有问题!!!

导入依赖

compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okio:okio:1.5.0'


工具类


public class OkHttpUrl {
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int what = msg.what;
            if (what == 0) {
                String error = (String) msg.obj;
                onOkHttpListener.error(error);
            }else if(what == 1){
                String json = (String) msg.obj;
                onOkHttpListener.success(json);
            }
        }
    };
    private OkHttpGetListener onOkHttpListener;


    public void getData(String url){
        //创建请求对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建请求
        Request build = new Request.Builder().url(url).build();
        //创建请求队列
        Call call = okHttpClient.newCall(build);
        //请求
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = new Message();
                message.obj = "请求失败";
                message.what = 0;
                handler.sendMessage(message);
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = new Message();
                String json = response.body().string();
                message.obj = json;
                message.what = 1;
                handler.sendMessage(message);
            }
        });
    }

    //定义一个接口
    public interface OkHttpGetListener{
        void error(String error);
        void success(String success);
    }
    //定义一个外部访问的方法
    public void setOnOkHttpListener(OkHttpGetListener onOkHttpListener){
        this.onOkHttpListener = onOkHttpListener;
    }
}


//MainActivity


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    String key = "e0258b2d33ba47188d8a7f8f1524f100";
    String url = "http://v.juhe.cn/toutiao/index?type=yule&key="+key;
    List dataBeans = new ArrayList<>();
    private Button get;
    private RecyclerView rv;
    private MyAdapter myAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }


    private void initData() {
        rv.setLayoutManager(new LinearLayoutManager(this));
        rv.setItemAnimator(new DefaultItemAnimator());
        myAdapter = new MyAdapter(this,dataBeans);
        rv.setAdapter(myAdapter);


    }
    private void initView() {
        get = findViewById(R.id.get);
        get.setOnClickListener(this);
        rv = findViewById(R.id.rv);
    }


    @Override
    public void onClick(View view) {
        //创建OkHttpClient对象
        OkHttpUrl okHttpUrl = new OkHttpUrl();
        okHttpUrl.getData(url);
        okHttpUrl.setOnOkHttpListener(new OkHttpUrl.OkHttpGetListener() {
            @Override
            public void error(String error) {
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
            }


            @Override
            public void success(String success) {
                Gson gson = new Gson();
                Product product = gson.fromJson(success, Product.class);
                dataBeans.addAll(product.getResult().getData());
                myAdapter.notifyDataSetChanged();
            }
        });
    }

}


//Adapter


public class MyAdapter extends RecyclerView.Adapter implements View.OnClickListener {
    Context context;
    List list;
    int position;
    private ItemListener itemClickListener;


    public MyAdapter(Context context, List list) {
        this.context = context;
        this.list = list;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.viewholder_view, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }


    @Override
    public void onBindViewHolder(MyViewHolder holder,int position) {
        this.position = position;
        //加载图片
        Glide.with(context)
                .load(list.get(position).getThumbnail_pic_s())
                .error(R.drawable.ic_launcher_background)
                .into(holder.imageView);
        holder.textView.setText(list.get(position).getTitle());
    }


    @Override
    public int getItemCount() {
        return list.size();
    }


    @Override
    public void onClick(View view) {
        Toast.makeText(context, ""+position, Toast.LENGTH_SHORT).show();
    }


    //监听事件接口
    public interface ItemListener{
        void OnItemClick(View view,int position);
    }


    //提供外部访问的方法
    public void setOnItemClickListener1(ItemListener itemClickListener){
        this.itemClickListener = itemClickListener;
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        ImageView imageView;


        public MyViewHolder(View itemView) {
            super(itemView);
            this.imageView = itemView.findViewById(R.id.img);
            this.textView = itemView.findViewById(R.id.text);
        }
    }
}

你可能感兴趣的:(OkHttpClient请求网络数据)