okHttp解析到RecyclerView显示

来源:互联网 发布:神途游戏辅助编程 编辑:程序博客网 时间:2024/06/04 00:29

添加依赖,权限

compile 'com.google.code.gson:gson:2.8.1'    compile 'com.android.support:recyclerview-v7:26.+'    compile 'com.github.bumptech.glide:glide:3.8.0'<uses-permission android:name="android.permission.INTERNET"/>
接下来再写一个Bean类

HomeAdapter,RecyclerView的点击事件

import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;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/10/18. */public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {    private List<Bean.TopStoriesBean> mTop_stoires;    private Context context;    private MyItemClickListener mItemClickListener;    public HomeAdapter(List<Bean.TopStoriesBean> mTop_stoires, Context context) {        this.mTop_stoires = mTop_stoires;        this.context = context;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);        MyViewHolder me = new MyViewHolder(view, mItemClickListener);        return me;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        holder.tv.setText(mTop_stoires.get(position).getTitle());        Glide.with(context).load(mTop_stoires.get(position).getImage()).into(holder.imageView);    }    @Override    public int getItemCount() {        return mTop_stoires != null ? mTop_stoires.size() : 0;    }    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {        private MyItemClickListener myListener;        private  ImageView imageView;        private TextView tv;        public MyViewHolder(View view, MyItemClickListener myItemClickListener) {            super(view);            //将全局的监听赋值给接口            this.myListener = myItemClickListener;            itemView.setOnClickListener(this);            tv = (TextView) view.findViewById(R.id.tv_title);            imageView = (ImageView) view.findViewById(R.id.image_Top);        }        /**         * 实现OnClickListener接口重写的方法         *         * @param view         */        @Override        public void onClick(View view) {            if (myListener != null) {                myListener.onItemClick(view, getPosition());            }     }     }     /**     * 创建一个回调接口     */    public interface MyItemClickListener {        void onItemClick(View view, int position);    }    /**     * 在activity中adapter就是调用这个方法,将点击事件监听传递过去,并赋值给全局的监听     */    public void setItemClickListener(MyItemClickListener myItemClickListener) {        this.mItemClickListener = myItemClickListener;    }}

main方法,ok进行解析

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 android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import com.google.gson.Gson;import java.io.IOException;import java.util.List;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity {private Handler handler = new Handler(){    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        if (msg.what==0){            Bean bean = (Bean) msg.obj;            mTop_stories = bean.getTop_stories();            HomeAdapter homeAdapter = new HomeAdapter(mTop_stories, MainActivity.this);            recyclerView.setAdapter(homeAdapter);            homeAdapter.setItemClickListener(new HomeAdapter.MyItemClickListener() {                @Override                public void onItemClick(View view, int position) {                    Toast.makeText(MainActivity.this, mTop_stories.get(position).getTitle(), Toast.LENGTH_SHORT).show();                }            });        }    }};    private List<Bean.TopStoriesBean> mTop_stories;    private RecyclerView recyclerView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取资源id        initview();        //网络请求数据        getrequest();    }    private void initview() {        recyclerView = (RecyclerView) findViewById(R.id.recy);        recyclerView.setLayoutManager(new LinearLayoutManager(this));    }    private void getrequest() {new Thread(new Runnable() {    @Override    public void run() {        OkHttpClient ok = new OkHttpClient();        Request request = new Request.Builder().url("http://news-at.zhihu.com/api/4/news/latest").build();        try {            Response response = ok.newCall(request).execute();            final String s = response.body().string();            runOnUiThread(new Runnable() {                @Override                public void run() {                    Gson gson = new Gson();                    Bean bean = gson.fromJson(s, Bean.class);                    Message msg = new Message();                    msg.what=0;                    msg.obj=bean;                    handler.sendMessage(msg);                }            });        } catch (Exception e) {            e.printStackTrace();        }    }}).start();    }}

主布局,一个RecyclerView

<android.support.v7.widget.RecyclerView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/recy"        >    </android.support.v7.widget.RecyclerView>

一个item布局

<ImageView        android:layout_width="match_parent"        android:layout_height="300dp"        android:id="@+id/image_Top"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_marginLeft="10dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv_title"        android:textSize="20sp"        android:text="1111"        />
原创粉丝点击