总结一下Android比较常用的开源库的使用方式,包括okhttp、glide、GSON、leakcanary、litepal等

目录

一、OkHttp

二、GSON

三、Glide


一、OkHttp

    1、添加OkHttp库的依赖

       在app/build.gradle文件中,dependencies闭包中加入依赖:

   dependencies {       ......       implementation 'com.squareup.okhttp3:okhttp:3.12.1'}        其他引入方式,见github上okhttp库的说明:https://github.com/square/okhttp

     2、使用方法

      (1)Get请求         

 /*发送HTTP Get请求    * 参数:    *    address:请求的url地址    * */    public static void sendOkHttpRequest(final String address){        new Thread(new Runnable() {            @Override            public void run() {                //创建一个OkHttpClient的实例                OkHttpClient okHttpClient = new OkHttpClient();                //创建一个Request对象                Request request = new Request.Builder().url(address).build();                try {                    //调用OkHttpClient的newCall()方法来创建一个Call对象,通过它的execute()方法来发送请求并获取服务器返回的数据                    Response response = okHttpClient.newCall(request).execute();                    Log.d(TAG, "run: " + response.body().string());                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }

   需要注意的是,发送网络请求属于耗时操作,无法在UI线程(主线程)进行,使用的时候一定单独起一个子线程去发送网络请求,否则会抛出android.os.NetworkOnMainThreadException的异常导致程序崩溃。

因此,OkHttp提供了一个回调接口,可供调用方有时机去处理服务器返回的数据

/*发送HTTP Get请求 * 参数: *    address: 请求的url地址 *    callback: OkHttp回调接口 * */public static void sendOkHttpRequest2(String address, Callback callback){    //创建一个OkHttpClient的实例    OkHttpClient okHttpClient =  new OkHttpClient();    //创建一个Request对象    Request request = new Request.Builder().url(address).build();    //调用OkHttpClient的newCall()方法来创建一个Call对象    //enqueue()方法内部会开启一个子线程去执行http请求,并将最终的请求结果回调到Callback中    okHttpClient.newCall(request).enqueue(callback);}
调用方式:HttpUtilty.sendOkHttpRequest("http://www.baidu.com", new Callback() {    @Override    public void onFailure(Call call, IOException e) {        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(getApplicationContext(), "http connected failed", Toast.LENGTH_SHORT).show();            }        });    }    @Override    public void onResponse(Call call, Response response) throws IOException {        Log.d(TAG, "onResponse: " + response.body().string());        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(getApplicationContext(), "success", Toast.LENGTH_SHORT).show();            }        });    }});

 

需要注意的是,Callback最终的回调接口还是在okhttp起的子线程中运行的,因此不可以直接在回调接口里执行任何UI操作,可以借助runOnUiThread()方法来进行线程切换。

(2)Post请求     

public static void sendOkHttpPostRequest(String address, Callback callback){    //创建一个OkHttpClient的实例    OkHttpClient okHttpClient =  new OkHttpClient ();    //构建一个RequestBody对象来存放待提交的参数    RequestBody requestBody = new FormBody.Builder()            .add("username", "admin")            .add("password", "123456")            .build();    //创建一个Request对象    Request request = new Request.Builder()            .url(address)            .post(requestBody)            .build();    //调用OkHttpClient的newCall()方法来创建一个Call对象    //enqueue()方法内部会开启一个子线程去执行http请求,并将最终的请求结果回调到Callback中    okHttpClient.newCall(request).enqueue(callback);}

二、GSON

       1、添加GSON依赖: 其他引入方式可参照github gson开源库:https://github.com/google/gson

          dependencies {

               implementation 'com.google.code.gson:gson:2.8.5'

           }

       2、使用方式

          比如说要解析的JSON数据格式如下:

{
    "n": "Tom",
    "a": 20,
    "p": {
        "f": "Peter",
        "m": "Mary"
    }
}           

,其中n标识name,a标识age,p标识parent,f标识father,m标识mother

         (1)定义一个Person类,包含name、age、parent等属性

public class Person {    //由于JSON中的一些字段不一定适合直接作为Java字段命名,可以使用GSON提供的注解来让JSON字段和    //JAVA字段之间建立映射    @SerializedName("n")    public String name;    @SerializedName("a")    public String age;    @SerializedName("p")    public Parent parent;    public class Parent{        @SerializedName("f")        public String father;        @SerializedName("m")        public String mother;    }}

   (2)使用Gson解析json数据

public static Person handleJsonData(String jsonData){    Gson gson = new Gson();    Person person = gson.fromJson(jsonData, Person.class);    return person;}

如果解析的是一段JSON数组(如下所示),里边每个元素的数据格式都是一致的,则要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中

[{
        "n": "Tom",
        "a": 20,
        "p": {
            "f": "Peter",
            "m": "Mary"
        }
    },
    {
        "n": "Penny",
        "a": 18,
        "p": {
            "f": "Peter",
            "m": "Mary"
        }
    }
]

public static void handleJsonListData(String jsonData){    Gson gson = new Gson();    List personList = gson.fromJson(jsonData, new TypeToken>(){}.getType());    for (Person person:personList){        Log.d(TAG, "name: " + person.name);    }}

 

三、Glide

1、引入依赖: https://github.com/bumptech/glide

2、使用方式:

    在Layout中创建一个ImageView,在Activity中利用Glide的方法给ImageView设置view:

     Glide.with(this).load(picUrl).into(bingPicImage);

四、LitePal

五、LeakCanary

更多相关文章

  1. Java(Android)数据结构汇总(二)-- Set(下)
  2. android通过反射获取wifi热点ap的ssid和password
  3. android 更新UI的两种方法
  4. android 在surfaceView上画图
  5. RxJava RxAndroid(安卓)在android中最重要的应用(一)
  6. java android HTTP应用程序设计
  7. Android定时器和Handler用法实例分析
  8. 网络请求Volley篇【Android】
  9. node.js+android http请求响应

随机推荐

  1. NA(Nirvana)公链“为应用而生” NAC公链
  2. Vsftpd虚拟用户登录
  3. 设计模式3之抽象工厂模式
  4. 这款手绘风格的在线制图软件超棒
  5. 什么是Exadata Smart Scan?
  6. 公司DBA关于MySQL开发的一点经验
  7. 公益课,RWP团队谈性能优化之大开眼界篇来
  8. 服务器指纹识别之 DNS TXT
  9. 设计模式4之模板方法模式
  10. 什么是响应式网页?有什么特点呢?