加依赖:
gson依赖
compile 'com.google.code.gson:gson:2.2.4'
okhttp依赖 compile 'com.squareup.okhttp3:okhttp:3.10.0'加权限:
<uses-permission android:name="android.permission.INTERNET"/>
布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.day_0330_okhttp.MainActivity"> <Button android:onClick="click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="listview展示出来" /> <Button android:onClick="post" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="封装post" /> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
===========================================
主方法:
import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ListView; import com.example.day_0330_okhttp.adapter.MyAdapter; import com.example.day_0330_okhttp.utils.OkhtttpUtils; import com.google.gson.Gson; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class MainActivity extends AppCompatActivity { String url="http://www.meirixue.com/api.php?c=index&a=index"; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); String json = (String) msg.obj; Gson gson = new Gson(); Bean bean = gson.fromJson(json, Bean.class); List<Bean.DataBean.AdlistBean> adlist = bean.getData().getAdlist(); MyAdapter adapter = new MyAdapter(MainActivity.this,adlist); lv.setAdapter(adapter); } }; private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = findViewById(R.id.lv); } //get请求 public void click(View v){ OkhtttpUtils.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } /** * 运行在子线程里的, * @param call * @param response * @throws IOException */ @Override public void onResponse(Call call, Response response) throws IOException { //服务器返回来的json String json = response.body().string(); Message msg = Message.obtain(); msg.obj=json; handler.sendMessage(msg); // Log.e("mainActivity",json); } }); } //post public void post(View v){ String url ="https://www.zhaoapi.cn/user/login"; Map<String,String> map = new HashMap<>(); map.put("mobile", "15715317583"); map.put("password", "123456"); OkhtttpUtils.doPost(url, map, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Log.e("MainActivity",response.body().string()); } }); } }
========================================================
Bean类:
http://www.meirixue.com/api.php?c=index&a=index
=============================================
Okhttp类:
import android.os.Environment; import java.io.File; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; public class OkhtttpUtils { //单例模式,把构造方法进行私有化 private OkhtttpUtils(){}; static OkHttpClient client; public static OkHttpClient getInstance(){ if (client==null) { //更加安全 synchronized (OkhtttpUtils.class) { //缓存的地方 mnt/sdcard File file = new File(Environment.getExternalStorageDirectory(), "cache11"); client = new OkHttpClient().newBuilder() .readTimeout(3000, TimeUnit.SECONDS) //设置读取超时时间 .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间 .cache(new okhttp3.Cache(file, 10 * 1024)) .build(); } } return client; } /** * get请求 * Callback 是一个接口 */ public static void doGet(String url, Callback callback){ //1:拿到okhttpclient 对像 OkHttpClient client = getInstance(); //2:进行请求的操作 Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(callback); } //post请求 /** * @param url 请求的地址 * @param parms 请求的参数 * @param callback callback */ public static void doPost(String url, Map<String,String> parms,Callback callback){ //得到客户端的对像 OkHttpClient client = getInstance(); //不是FormBody,而是一个Builder FormBody.Builder body = new FormBody.Builder(); //key value for (String key:parms.keySet()){ //value的值 body.add(key,parms.get(key)); } Request request = new Request.Builder() .url(url) .post(body.build()) .build(); client.newCall(request).enqueue(callback); } }
=====================================================
Adapter适配器类:
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.day_0330_okhttp.Bean; import java.util.List; public class MyAdapter extends BaseAdapter{ Context context; List<Bean.DataBean.AdlistBean>list; public MyAdapter(Context context, List<Bean.DataBean.AdlistBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { TextView tv = new TextView(context); tv.setText(list.get(i).getName()); return tv; } }