使用gson解析json数据更加简单方便
Gson解析json数据
这里展示一下项目结构

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txt_id"
android:textSize="20sp"
/>
</LinearLayout>
MyJson实体类
作为我们Gson解析需要也是后面将数据显示在ListView也需要的
public class MyJson {
private int Id;
private String Name;
public MyJson() {
}
public MyJson(int id, String name) {
Id = id;
Name = name;
}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
@Override
public String toString() {
return "MyJson{" +
"Id=" + Id +
", Name='" + Name + '\'' +
'}';
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
private ListView listView,listView2,listView3,listView4;
private TextView txt;
private MyJson myJson;
private Handler handler = new Handler( ){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 1){
String str = String.valueOf(msg.arg1);
txt.setText("获取到的id是:"+str);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initVeiw();
}
private void initVeiw() {
txt = findViewById(R.id.txt_id);
}
@Override
protected void onStart() {
super.onStart();
get1();
}
private void get1(){
//模拟
String json = "{\"Id\":3,\"Name\":\"user1\"}";
Message message = getMessage_gson(json);
message.what = 1;
}
//这一步是使用Android Studio中的快捷键将反复使用的代码放在一块这样减少代码量很好用
private Message getMessage_gson(String json) {
Gson gson = new Gson();
myJson = gson.fromJson(json, MyJson.class);
//使用Handler
Message message = new Message();
message.arg1 = myJson.getId();
handler.sendMessage(message);
return message;
}
}
不了解Handler的可以去看看这位大佬的Handler用法及解析
选择一块代码然后如图
然后输入自己想要输入的称呼就可以
然后就解析出来你想要的内容了(例如id)
将解析的数据显示在ListView上
也是先看一下项目结构


xml布局
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<ListView
android:id="@+id/listse1"
android:layout_width="match_parent"
android:layout_height="50dp">
</ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<ListView
android:id="@+id/listse2"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<ListView
android:id="@+id/listse3"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<ListView
android:id="@+id/listse4"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</LinearLayout>
</LinearLayout>
road.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="one"
android:textSize="30sp"
/>
</LinearLayout>
</LinearLayout>
Java代码
MyBaseAdapter类继承BaseAdapter并实现相关方法
BaseAdapter 适配器
public class MyBaseAdapter extends BaseAdapter {
private List<MyJson> list;
private LayoutInflater inflater;
public MyBaseAdapter(List<MyJson> list, Context context) {
this.list = list;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list==null?0:list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//加载布局
View view1 = inflater.inflate(R.layout.road,null);
MyJson util = (MyJson) getItem(i);
TextView text1= view1.findViewById(R.id.txt);
text1.setText("获取到的id:"+util.getId());
return view1;
}
}
MyJson实体类
public class MyJson {
private int Id;
private String Name;
public MyJson() {
}
public MyJson(int id, String name) {
Id = id;
Name = name;
}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
@Override
public String toString() {
return "MyJson{" +
"Id=" + Id +
", Name='" + Name + '\'' +
'}';
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
private ListView listView,listView2,listView3,listView4;
private TextView txt;
private MyJson myJson;
private Handler handler = new Handler( ){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 1){
//创建Adapter 实例化对象, 调用构造函数传参,将数据和adapter 绑定
//将定义的adapter 和 listView 绑定
MyBaseAdapter baseAdapter = getMyBaseAdapter(msg);
listView.setAdapter(baseAdapter);
}else if (msg.what == 2){
MyBaseAdapter baseAdapter = getMyBaseAdapter(msg);
listView2.setAdapter(baseAdapter);
}else if (msg.what == 3){
MyBaseAdapter baseAdapter = getMyBaseAdapter(msg);
listView3.setAdapter(baseAdapter);
}else if (msg.what == 4){
MyBaseAdapter baseAdapter = getMyBaseAdapter(msg);
listView4.setAdapter(baseAdapter);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initVeiw();
}
private void initVeiw() {
listView = findViewById(R.id.listse1);
listView2 = findViewById(R.id.listse2);
listView3 = findViewById(R.id.listse3);
listView4 = findViewById(R.id.listse4);
}
@Override
protected void onStart() {
super.onStart();
get1();
get2();
get3();
get4();
}
private void get1(){
String json = "{\"Id\":3,\"Name\":\"user1\"}";
Message message = getMessage_gson(json);
message.what = 1;
}
private void get2(){
String json = "{\"Id\":4,\"Name\":\"user1\"}";
Message message = getMessage_gson(json);
message.what = 2;
}
private void get3(){
String json = "{\"Id\":1,\"Name\":\"user1\"}";
Message message = getMessage_gson(json);
message.what = 3;
}
private void get4(){
String json = "{\"Id\":2,\"Name\":\"user1\"}";
Message message = getMessage_gson(json);
message.what = 4;
}
private Message getMessage_gson(String json) {
Gson gson = new Gson();
myJson = gson.fromJson(json, MyJson.class);
Message message = new Message();
message.arg1 = myJson.getId();
handler.sendMessage(message);
return message;
}
private MyBaseAdapter getMyBaseAdapter(@NonNull Message msg) {
List<MyJson> list = new ArrayList<>();
MyJson util = new MyJson();
int f = msg.arg1;
util.setId(f);
//将对象添加到列表中
list.add(util);
return new MyBaseAdapter(list,getBaseContext());
}
}
这样就将解析的数据在ListView显示出来了
谢谢看到这里,安卓萌新的学习笔记【挖坑排序】,有问题望大佬指出谢谢。
适配器相关操作借鉴这位大佬的ListView 和 Adapter 适配器的简单介绍