点击事件有问题!!!
导入依赖
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<Product.ResultBean.DataBean> 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<MyAdapter.MyViewHolder> implements View.OnClickListener {
Context context;
List<Product.ResultBean.DataBean> list;
int position;
private ItemListener itemClickListener;
public MyAdapter(Context context, List<Product.ResultBean.DataBean> 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);
}
}
}