学习笔记: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 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
更多相关文章
- Java(Android)数据结构汇总(二)-- Set(下)
- android通过反射获取wifi热点ap的ssid和password
- android 更新UI的两种方法
- android 在surfaceView上画图
- RxJava RxAndroid(安卓)在android中最重要的应用(一)
- java android HTTP应用程序设计
- Android定时器和Handler用法实例分析
- 网络请求Volley篇【Android】
- node.js+android http请求响应