学习笔记:Android开源库使用方法总结

总结一下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<Person> personList = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值