Json是一种轻量级的数据交换格式
JSON易于阅读、编写,也易于机器解析和生成。
JSON基本格式:
1、键值对对象格式:用“{}”包围
2、数组格式:用“[]”包围.
JSON解析原则:
1、看到{},创建JsonObject对象;
2、看到[],创建JsonArray对象;
3、看到JsonArray,要for循环遍历。
原生解析Android 提供的 Json 解析类 API 都在 org.json 包下,常用到的类如下所示:
a)JSONObject: Json 对象,可以完成 Json 字符串与 Java 对象的相互转换
b)JSONArray: Json 数组,可以完成 Json 字符串与 Java 集合或对象的相互转换
jsonObject.getString(“key”); //获取对象里的具体String字段
jsonObject.getInt(“key”); //获取对象里的具体int字段
JSonObject 原生解析JSonObject jsonObject = new JSonObject(s);
String code = jsonObject.getString("code");
String message = jsonObject.getString("message");
JSonArray list = jsonObject.getJSonArray("list");
for (int i = 0; i < list.length(); i++) {
Log.d("TAG", "数据=" + list.get(i));
}
JSonObject 原生解析 getPageJson.jsontry {
JSonObject o = new JSonObject(getString);
JSonObject data = o.getJSonObject("data");
JSonArray jsonArray = data.getJSonArray("list");
for (int i= 0;i
JSonObject jsonObject = (JSONObject) jsonArray.get(i);
String title = jsonObject.getString("title");
Log.d("TAG","title==="+title); }
} catch (JSonException e) {
e.printStackTrace();
}
Gson解析implementation 'com.google.code.gson:gson:2.8.6'
Gson gson = new Gson();
// String 转化为bean
gson.fromJson(response.body().string(), GetPageResponseBean.class);
//bean 转行为String
String s = gson.toJson(Object);
Gson gson = new Gson();
GetPageJsonBean getPageJsonBean = gson.fromJson(getString, GetPageJsonBean.class);
GetPageJsonBean.Data data = getPageJsonBean.getData();
List list = data.getList();
for (int i = 0; i < list.size(); i++) {
Log.d("TAG",list.get(i).getTitle());
}
Glide图片解析依赖:
implementation 'com.github.bumptech.glide:glide:4.4.0'
如果添加Okhttp3
implementation "com.github.bumptech.glide:okhttp3-integration:4.11.0"
使用:
Glide.with(this).load(load).into(imageView);
补充知识----子线程子线程实现
1、继承Thread
public class MyThread extends Thread{
@Override
public void run() {
super.run();
Log.d("TAG","===MyThread===");
}
}
MyThread myThread = new MyThread();
myThread.start();
2、匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
Log.d("TAG","===匿名内部类===");
}
}).start();
3、实现Runnable接口
public class MyThread1 implements Runnable{
@Override
public void run() {
Log.d("TAG","===MyThread1===");
}
}
MyThread1 myThread1 = new MyThread1();
new Thread(myThread1).start();
三种启动子线程的方式 共同点1、耗时操作
run(){
}
2、子线程是需要启动的
.start()
Handler使用过程only the original thread that created a view hierarchy can touch its views
不能再子线程更新UI
一、创建new Handler
Handler handler = new Handler(){}
二、重写handleMessage方法
三、发送message
handler.sendMessage(message);
Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
String message = (String) msg.obj;
Toast.makeText(OkHttpActivity.this,message,Toast.LENGTH_SHORT).show();
text.setText(message);
break;
default:
}
}
};
Message message = new Message();
message.what = 1;
message.obj = msg; //发送的内容
handler.sendMessage(message);
MessageMessage需要注意以下四点
1、message可以通过new创建,也可以通过Message.obtain()来获取
2、如果message只携带一个简单的int数据类型,应该优先使用arg1属性和arg2属性
3、尽可能使用message.what来识别信息
4、多条信息,可以使用bundle来将这些信息集中到一起
MessageQueue
MessageQueue即消息队列,用于存放handler发送的信息
每个线程只有一个MessageQueue
与MessageQueue相关的操作有两种
1、入队列操作
2、出队列操作
LooperLooper 循环器和轮询器, 它是线程中MessageQueue的管家。
当Looper发现MessageQueue中存在一个新的任务要执行时,就会
将它传递到Handler的handleMessage方法中,执行完之后,等待下
一个任务
HandlerHandler 处理者,用于发送消息和处理消息。
1、handler负责消息的发送和消息的接收
2、looper负责传递消息,其内部包含了MessageQueue,取出消息
后发送给handler
3、MessageQueue是消息队列,Looper会循环读取
AsyncTask使用时需要遵循以下规则:
1)Task的实例必须在UI thread中创建
2)execute方法必须在UI thread中调用
3)不要手动的调用这些方法,只调用execute即可
4)该task只能被执行一次,否则多次调用时将会出现异常
5) doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定。
AsyncTask的使用步骤有3个:i. 创建 AsyncTask 子类 & 根据需求实现核心方法
ii. 创建 AsyncTask子类的实例对象(即 任务实例)
iii. 手动调用execute(()从而执行异步线程任务
android为了更方便的在线程中操作Ui,延伸出了AsyncTask,因此如果在做android的应用开发的时候,如果需要用到与界面相关的线程的时候首选AsyncTask,如果线程主要用来处理数据,不参与界面操作的时候尽量用Thread线程



