新建项目
导入 Gson 依赖
implementation 'com.google.code.gson:gson:2.8.5'
设计布局
这里设计俩个 TextView
和一个 Button
,点击 Button
后发送 Http
请求获取 Json
数据,并且通过 Gson
进行解析,将解析结果显示在 TextView
上,以此验证解析成功。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nodata"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nodata"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="test"/>
</LinearLayout>
代码很简单就不多解释了。另外 在 Activity 中注册控件 的内容也省略。
发送 Http 请求并获取数据
操作同一般的 HTML 源码获取,这里不多解释。由于保存在网络上的 Json 数据其源码就是合法的 Json 字符串,因此通过解析网页源码的方法获取的内容就是 Json 数据。这里有一个网页保存了 Json 数据,可用于测试。
https://user.moecraft.net:8443/API/Mc/authlib/
获取源码之后将其保存在一个字符串内即可继续进行下一步操作。此处命名为 jsonData
。
利用 GsonFormat 插件生成映射对象
具体操作方法不解释了,具体看之前发布的博客文章。这里新建的类命名为 ApiTest
。
以下代码为 GsonFormat
自动生成。
import java.util.List;
public class ApiTest {
/**
* meta : {"serverName":"MoeCraft","implementationName":"MoeCraft Account Center: Minecraft Yggdrasil API (Completely Implemented by Kenvix) for Authlib-Injector 1.1.23","implementationVersion":"5.0"}
* skinDomains : [".moecraft.net",".kenvix.com","accounts.moecraft.net","user.moecraft.net","user.moecraft.net:8443","localhost"]
* signaturePublickey : -----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYM0MxKIv4ybovs4XlwMk4g/0r
O4+HDK+ltpFDkFjiBY5pDHK4J5Z2tdtkliK7DC2mwIAK5wOeTXYb9uHO8VAVxuE9
enMSOiVl9uvSVPelDU/t/JH3gSE6yYT7aNHT6xpvqnSQrCUGDvTbsqXvjxEr3F/H
zORoqhiGR+F27XfOhQIDAQAB
-----END PUBLIC KEY-----
* status : 0
* info :
*/
private MetaBean meta;
private String signaturePublickey;
private int status;
private String info;
private List<String> skinDomains;
public MetaBean getMeta() {
return meta;
}
public void setMeta(MetaBean meta) {
this.meta = meta;
}
public String getSignaturePublickey() {
return signaturePublickey;
}
public void setSignaturePublickey(String signaturePublickey) {
this.signaturePublickey = signaturePublickey;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public List<String> getSkinDomains() {
return skinDomains;
}
public void setSkinDomains(List<String> skinDomains) {
this.skinDomains = skinDomains;
}
public static class MetaBean {
/**
* serverName : MoeCraft
* implementationName : MoeCraft Account Center: Minecraft Yggdrasil API (Completely Implemented by Kenvix) for Authlib-Injector 1.1.23
* implementationVersion : 5.0
*/
private String serverName;
private String implementationName;
private String implementationVersion;
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
}
public String getImplementationName() {
return implementationName;
}
public void setImplementationName(String implementationName) {
this.implementationName = implementationName;
}
public String getImplementationVersion() {
return implementationVersion;
}
public void setImplementationVersion(String implementationVersion) {
this.implementationVersion = implementationVersion;
}
}
}
源 Json 数据中内容较多,这里我们只挑选部分内容基础进行测试。
此处我们选择解析的对象(目标)是 MetaBean
下的 serverName
和 implementationName
字段。
通过 Gson 解析对应内容
- 构建 Gson 对象
Gson gson = new Gson();
- 通过
Gson
解析来构建ApiTest
实体类
ApiTest apiTest = gson.fromJson(jsonData, ApiTest.class);
- 直接通过
get
方法访问apiTest
实体类中的内容即可
text1.setText(apiTest.getMeta().getServerName());
text2.setText(apiTest.getMeta().getImplementationName());
结束
其实很简单,利用谷歌提供的 Gson
配合 GsonFormat
简直不要太爽。