栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第五章:Android开发之联网后续-解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第五章:Android开发之联网后续-解析

JSON数据

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.json

try {

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);

Message

 Message需要注意以下四点

1、message可以通过new创建,也可以通过Message.obtain()来获取

2、如果message只携带一个简单的int数据类型,应该优先使用arg1属性和arg2属性

3、尽可能使用message.what来识别信息

4、多条信息,可以使用bundle来将这些信息集中到一起

MessageQueue

MessageQueue即消息队列,用于存放handler发送的信息

每个线程只有一个MessageQueue

与MessageQueue相关的操作有两种

1、入队列操作

2、出队列操作

Looper

Looper  循环器和轮询器, 它是线程中MessageQueue的管家。

当Looper发现MessageQueue中存在一个新的任务要执行时,就会

将它传递到Handler的handleMessage方法中,执行完之后,等待下

一个任务

Handler

Handler 处理者,用于发送消息和处理消息。

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线程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号