需要的依赖
compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.squareup.okio:okio:1.5.0' compile 'com.google.code.gson:gson:2.6.2' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:26.1.0'需要权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>MainActivity
package com.lixinyang.okhttpclient; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.gson.Gson; import com.lixinyang.okhttpclient.Adapters.MyAdapter; import com.lixinyang.okhttpclient.Bean.image; import com.lixinyang.okhttpclient.Utils.OkHttpUtils; import java.util.List; public class MainActivity extends AppCompatActivity { String key = "2f41498b35e69877fc56dc96776e5d1f"; String uri = "http://v.juhe.cn/toutiao/index?type=top&key="+key; private Button btn; private RecyclerView rv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OkHttpUtils utils = new OkHttpUtils(); utils.get(uri); utils.setOkHttoListener(new OkHttpUtils.getOkHttpListener(){ @Override public void error(String error) { Toast.makeText(MainActivity.this,error,Toast.LENGTH_SHORT).show(); } @Override public void success(String json) { //Toast.makeText(MainActivity.this,json,Toast.LENGTH_SHORT).show(); Gson gson = new Gson(); image image = gson.fromJson(json, image.class); List<com.lixinyang.okhttpclient.Bean.image.ResultBean.DataBean> data = image.getResult().getData(); rv.setLayoutManager(new LinearLayoutManager(MainActivity.this)); rv.setItemAnimator(new DefaultItemAnimator()); final MyAdapter adapter = new MyAdapter(MainActivity.this,data); rv.setAdapter(adapter); } }); } }); } private void init() { btn = (Button) findViewById(R.id.btn); rv = (RecyclerView) findViewById(R.id.rv); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.item,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.one: rv.setLayoutManager(new LinearLayoutManager(MainActivity.this)); break; case R.id.two: rv.setLayoutManager(new GridLayoutManager(MainActivity.this,2)); break; case R.id.three: rv.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); break; } return super.onOptionsItemSelected(item); } }
OkHttpUtils
MyAdapterpackage com.lixinyang.okhttpclient.Utils; import android.annotation.SuppressLint; import android.os.Handler; import android.os.Message; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * author:Created by WangZhiQiang on 2018/1/3. */ public class OkHttpUtils { private getOkHttpListener okHttoListener; @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; okHttoListener.error(error); } if(what==1){ String json = (String) msg.obj; okHttoListener.success(json); } } }; public void get(String uri){ OkHttpClient client = new OkHttpClient(); Request build = new Request.Builder().url(uri).build(); Call call = client.newCall(build); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message msg = new Message(); msg.what=0; msg.obj = "请求失败"; handler.sendMessage(msg); } @Override public void onResponse(Call call, Response response) throws IOException { Message msg = new Message(); msg.what = 1; msg.obj = response.body().string(); handler.sendMessage(msg); } }); } public interface getOkHttpListener{ void error(String error); void success(String json); } public void setOkHttoListener(getOkHttpListener okHttoListener){ this.okHttoListener = okHttoListener; } }
package com.lixinyang.okhttpclient.Adapters; 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 com.lixinyang.okhttpclient.Bean.image; import com.lixinyang.okhttpclient.R; import java.util.List; /** * author:Created by WangZhiQiang on 2018/1/3. */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<image.ResultBean.DataBean> list; private Context context; public MyAdapter(Context context, List<com.lixinyang.okhttpclient.Bean.image.ResultBean.DataBean> list){ this.context = context; this.list = list; } //实例化ViewHolder的时候把布局传入 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.activity_item, null); MyViewHolder holder = new MyViewHolder(view); return holder; } //当你绑定控件的时候给控件赋值 @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.getTextView().setText(list.get(position).getTitle()); Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(holder.getImageView()); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder{ private final TextView textView; private final ImageView imageView; public MyViewHolder(View itemView) { super(itemView); this.imageView = itemView.findViewById(R.id.iv); this.textView = itemView.findViewById(R.id.tv); } public TextView getTextView() { return textView; } public ImageView getImageView() { return imageView; } } }