Android 使用gson解析接口数据
简要
据上一篇简述OkHttp的post请求方法,在总结那简单说了一下怎样获取数据后再赋值到页面上,现在展开说一下。
xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.andro.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity"
android:gravity="center">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="名字"/>
<TextView
android:layout_marginLeft="20dp"
android:id="@+id/tv_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄"/>
</LinearLayout>
导入谷歌的gson.jar包 (获取该jar包,搜索《轻语积累》公众号,回复gson关键字)。 将jar包复制到该文件夹下,然后右键选择 Add As Library 进行导入即可
代码实现
MainActivity.java代码如下:
package com.example.okhttp_tool;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.okhttp_tool.entity.UserInfo;
import com.example.okhttp_tool.utils.OkHttpTool;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
TextView tv_name,tv_age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
getUserInfo();
}
//初始化控制
private void initView() {
tv_name=findViewById(R.id.tv_name);
tv_age=findViewById(R.id.tv_age);
}
public void getUserInfo(){
String name="张三";
OkHttpTool.postUserInfo(name, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String str=response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson=new Gson();
UserInfo userInfo=gson.fromJson(str,UserInfo.class);
tv_name.setText(userInfo.getName());
tv_age.setText(userInfo.getAge());
}
});
}
});
}
}
UserInfo.java代码
package com.example.okhttp_tool.entity;
import java.io.Serializable;
public class UserInfo implements Serializable {
private Integer id;
private String name;
private Integer age;
//以下是set和get方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
OkHttpTool.java代码
package com.example.okhttp_tool.utils;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class OkHttpTool {
final static String url="http://127.0.0.1/userInfo/get";
public static void postUserInfo(String name, Callback callback){
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.创建一个RequestBody,可以用add添加键值对
RequestBody requestBody = new FormBody.Builder()
.add("name", name)
.build();
//3.创建Request对象,设置URL地址,将RequestBody作为post方法的参数传入
Request request = new Request.Builder().url(url).post(requestBody).build();
//4.创建一个call对象,参数就是Request请求对象
okHttpClient.newCall(request).enqueue(callback);
}
}
总结
以上便是使用gson解析接口数据的方法,如果接收的数据是list数组形式,方法如下:
Gson gson=new Gson();
UserInfo[] userInfo=gson.fromJson(str,UserInfo[].class);