Okhttp、Volley和Gson的简单介绍和配合使用
生活随笔
收集整理的這篇文章主要介紹了
Okhttp、Volley和Gson的简单介绍和配合使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.okhttp是一個高效的、快速的被谷歌認可的,支持HTTP/2和SPDY volley是一個方便網絡任務庫,可以負責請求、加載、緩存等同步問題,也可以處理圖片、JSON、文本操作起來比較簡單 gson是JSON序列化和反序列化(以上三個能相互間輕松使用主要還是因為okhttp是谷歌推薦的、volley是谷歌開發的、Gson是谷歌開發的) 2.okhttp的Get用法: 首先下載jar包,jar包的下載地址我不在發鏈接!
Android本身不允許UI做網絡線程,要開啟一個子線程;Okhttp支持異步線程并回調返回,上面的方法稍加改動即可:
Okhttp的post的用法: RequestBody formBody = new FormEncodingBuilder() .add("platform", "android") .add("name", "chace") .add("subject", "乾隆十八掌") .build(); Request request = new Request.Builder() .url(url) .post(body) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } else { throw new IOException("Unexpected code " + response); } 這個代碼是同步網絡請求,異步就改成enqueue就行了。 這個okhttp和gson的用法是整合于網絡,不過寫的清晰易懂: json串: { "data": [ { "appcontent": "1", "appname": "UC瀏覽器", "apppackagename": "com.UCMobile", "id": 1, "remark": "1" }, { "appname": "支付寶", "apppackagename": "com.alipay.android.app", "id": 2 }, { "appname": "WPS", "apppackagename": "cn.wps.moffice_eng", "id": 3 } ], "msg": "獲取信息列表成功", "version": 2 } 建立javaBean: 這是數組里面的屬性: public class ApkInfo { ? private String apppackagename; ? private Integer id; ? private String appname; ? private String appcontent; ? private String remark; ? public String getApppackagename() { ? return apppackagename; ? } ? public void setApppackagename(String apppackagename) { ? this.apppackagename = apppackagename; ? } ? public Integer getId() { ? return id; ? } ? public void setId(Integer id) { ? this.id = id; ? } ? public String getAppname() { ? return appname; ? } ? public void setAppname(String appname) { ? this.appname = appname; ? } ? public String getAppcontent() { ? return appcontent; ? } ? public void setAppcontent(String appcontent) { ? this.appcontent = appcontent; ? } ? public String getRemark() { ? return remark; ? } ? public void setRemark(String remark) { ? this.remark = remark; ? } ? @Override ? public String toString() { ? return "ApkInfo [id=" + id + ", remarm=" ? + remark + ", appname=" + appname + ", appcontent=" + appcontent ? + ", apppackagename=" + apppackagename + "]"; ? } ? } ? 這是外部集合的屬性: public class PackageListInfo { ? private String msg; ? private String version; ? private List<Object> data; ? public String getMsg() { ? return msg; ? } ? public void setMsg(String msg) { ? this.msg = msg; ? } ? public String getVersion() { ? return version; ? } ? public void setVersion(String version) { ? this.version = version; ? } ? public List<Object> getData() { ? return data; ? } ? public void setData(List<Object> data) { ? this.data = data; ? } ? @Override ? public String toString() { ? return "PackageListInfo [version=" + version + ", data=" + data + ", msg=" + msg ? + "]"; ? } ? } ? 新建一個OKHTTP的管理類get得到JSON數據,并進行處理。 import android.util.Log; ? import okhttp3.Call; ? import okhttp3.Callback; ? import okhttp3.OkHttpClient; ? import okhttp3.Request; ? import okhttp3.Response; ? public class GetApkPackage { ? public static String apkPackageUrl = http://192.168.10.133:8080/getAppInfor; ? public static GetApkPackage install = new GetApkPackage(); ? public static ArrayList<String> appList=new ArrayList<String>(); ? public void getPackage() { ? OkHttpClient mOkHttpClient = new OkHttpClient(); ? final Request request = new Request.Builder().url(apkPackageUrl).build(); ? mOkHttpClient.newCall(request).enqueue(new Callback() { ? @Override ? public void onFailure(Call call, IOException e) { ? System.out.println("獲取apk列表失敗"); ? Log.d("GetApkPackage", e.getMessage()); ? } ? @Override ? public void onResponse(Call call, Response response) throws IOException { ? String result = response.body().string(); ? System.out.println(result); ? //InputStream is = response.body().byteStream(); ? //byte[] bytes = response.body().bytes(); ? Gson gson = new Gson(); ? PackageListInfo packlist = gson.fromJson(result,PackageListInfo.class); ? System.out.println(packlist.getData().toString()); ? List<ApkInfo> apkList = new ArrayList<ApkInfo>(); ? Type type = new TypeToken<ArrayList<ApkInfo>>() {}.getType(); ? apkList = gson.fromJson(packlist.getData().toString(), type); ? /*? Map<String,ApkInfo> apkList = gson.fromJson(packlist.getData().toString(), ?? new TypeToken<List<ApkInfo>>() { ?? }.getType());? */ ? if(apkList == null){ ? System.out.println("apkpackage列表為空"); ? return; ? } ? for(int i =0;i<apkList.size();i++){ ? ? String apkName = apkList.get(i).getApppackagename(); ? System.out.println(apkName); ?? appList.add(apkName); ? } ?? } ? }); ? } ? public static GetApkPackage getInstall(){ ? ? ? ?? return install; ? } ? } ? 上述代碼中,對JSON數據的處理看起來很簡單,只要new一個GSON實例,然后通過gson.fromJson方法,就能夠得到json數據 [java] view plain copy 在CODE上查看代碼片派生到我的代碼片 Gson gson = new Gson(); ? PackageListInfo packlist = gson.fromJson(result,PackageListInfo.class);? OKHTTP發送一個字符串給服務器的實例如下: [java] view plain copy 在CODE上查看代碼片派生到我的代碼片 public final class PostString { ? public static final MediaType MEDIA_TYPE_MARKDOWN ? = MediaType.parse("text/x-markdown; charset=utf-8"); ? private final OkHttpClient client = new OkHttpClient(); ? public void run() throws Exception { ? String postBody = "" ? + "Releases\n" ? + "--------\n" ? + "\n" ? + " * _1.0_ May 6, 2016\n" ? + " * _1.1_ June 15, 2016\n" ? + " * _1.2_ August 11, 2016\n"; ? Request request = new Request.Builder() ? .url("https://192.168.10.133:8080/base") ? .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody)) ? .build(); ? Response response = client.newCall(request).execute(); ? if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); ? System.out.println(response.body().string()); ? } ? public static void main(String... args) throws Exception { ? new PostString().run(); ? } ? } ? 3.Volley的用法: Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。 JsonObjectRequest:返回JSON對象。 JsonArrayRequest:返回JsonArray。 StringRequest:返回String,這樣可以自己處理數據,更加靈活。 我們創建一個StringRequest: StringRequest stringRequest = new StringRequest("http://www.apkbus.com/forum.php", ? new Response.Listener<String>() { ? @Override ? public void onResponse(String response) { ? Log.d("TAG", response); ? } ? }, new Response.ErrorListener() { ? @Override ? public void onErrorResponse(VolleyError error) { ? Log.e("TAG", error.getMessage(), error); ? } ? }); ? 這篇主要還是簡單了介紹了三者的關系和用法!
[代碼]java代碼:
?| 01 02 03 04 05 06 07 08 09 10 11 12 | OkHttpClient client = new OkHttpClient(); ?public void execute() throws Exception { ????????Request request = new Request.Builder() ????????????????.url("http://www.apkbus.com/forum.php") ????????????????.build(); ????????Response response = client.newCall(request).execute(); ????????if(response.isSuccessful()){ ???????????? ????????????System.out.println(response.body().string()); ????????} ????} |
[代碼]java代碼:
?| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | private void enqueue(){ ????????Request request = new Request.Builder() ????????????????.url("http://www.apkbus.com/forum.php") ????????????????.build(); ????????client.newCall(request).enqueue(new Callback() { ????????????@Override ????????????public void onFailure(Request request, IOException e) { ????????????} ????????????@Override ????????????public void onResponse(Response response) throws IOException { ????????????????//NOT UI Thread ????????????????if(response.isSuccessful()){ ????????????????????System.out.println(response.body().string()); ????????????????} ????????????} ????????}); ????} |
轉載于:https://www.cnblogs.com/android-blogs/p/5718273.html
總結
以上是生活随笔為你收集整理的Okhttp、Volley和Gson的简单介绍和配合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【secureCRT】如何在secure
- 下一篇: 我的程序员之路