当前位置: 移动技术网 > IT编程>移动开发>Android > Android JSON数据与实体类之间的相互转化(GSON的用法)

Android JSON数据与实体类之间的相互转化(GSON的用法)

2019年07月24日  | 移动技术网IT编程  | 我要评论

非流主头像,菜鸟人夫,91free老婆

这篇文章就是示范如何用gson把json数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包。直接贴代码了:

import java.lang.reflect.type;
import java.util.arraylist;
import java.util.list;

import com.google.gson.gson;
import com.google.gson.gsonbuilder;
import com.google.gson.reflect.typetoken;

import android.app.activity;
import android.os.bundle;
import android.util.log;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;


public class mainactivity extends activity implements onclicklistener {
  private button bt_shititojson;
  private button bt_jsontoshiti;
  private button bt_jsontolist;
  private button bt_listtojson;

  private gson gson;
  private gsonbuilder builder;

  private person person;

  private string jsontest,jsonlisttest;
  private list<person> persons;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    init();

  }

  private void init() {
    //寻找控件
    bt_shititojson=(button) findviewbyid(r.id.bt_shititojson);
    bt_jsontoshiti=(button) findviewbyid(r.id.bt_jsontoshiti);
    bt_listtojson=(button) findviewbyid(r.id.bt_listtojson);
    bt_jsontolist=(button) findviewbyid(r.id.bt_jsontolist);
    //增加点击事件
    bt_shititojson.setonclicklistener(this);
    bt_jsontoshiti.setonclicklistener(this);
    bt_listtojson.setonclicklistener(this);
    bt_jsontolist.setonclicklistener(this);

    //这两句代码必须的,为的是初始化出来gson这个对象,才能拿来用
    builder=new gsonbuilder();
    gson=builder.create();

    //先制造出一个"人",第一个按钮点击的时候要用到
    person=new person();
    person.setname("张三");
    person.setage(20);
    person.settall(160);

  }

  @override
  public void onclick(view v) {
    switch(v.getid()){
    case r.id.bt_shititojson://实体类转换为json数据
      jsontest=gson.tojson(person, person.class);
      log.e("test", jsontest);
      //打印出来结果为
      // {"name":"张三","age":20,"tall":160}

      break;
    case r.id.bt_jsontoshiti://json数据转换为实体类
      person p=gson.fromjson(jsontest, person.class);
      log.e("test", p.getname()+" "+p.getage()+" "+p.gettall());
      //打印出来结果为
      //张三 20 160

      break;
    case r.id.bt_listtojson://存储实体类的集合转换为json数据集合
      //手动制造一个存有三人信息的集合,以便进行测试
      persons=new arraylist<person>();
      for(int i=0;i<3;i++){
        person p1=new person();
        p1.setname("李四"+i);
        p1.setage(23+i);
        p1.settall(165+i);
        persons.add(p1);
      }
      //persons被制造好了,现在开始测试
      //需要注意的是这里的type导入的是java.lang.reflect.type的包
      //typetoken导入的是 com.google.gson.reflect.typetoken的包
      type type=new typetoken<list<person>>(){}.gettype();
      jsonlisttest=gson.tojson(persons, type);
      log.e("test", jsonlisttest);
      //打印出来的数据
// [{"name":"李四0","age":23,"tall":165},{"name":"李四1","age":24,"tall":166},{"name":"李四2","age":25,"tall":167}]
      break;
    case r.id.bt_jsontolist://json数据的集合转换为存储实体类的集合
      list<person> p2=new arraylist<person>();
      type type1=new typetoken<list<person>>(){}.gettype();
      p2=gson.fromjson(jsonlisttest, type1);
      log.e("test", p2.size()+"");
      //打印了存储实体类集合的大小,不用看啦,,大小肯定是3
      //打印结果
      //3
      break;

    }

  }
}

person这个类:

public class person {
//人的名称
private string name;
//人的年龄
private int age;
//人的身高
private int tall;
public string getname() {
  return name;
}
public void setname(string name) {
  this.name = name;
}
public int getage() {
  return age;
}
public void setage(int age) {
  this.age = age;
}
public int gettall() {
  return tall;
}
public void settall(int tall) {
  this.tall = tall;
}

}

activity_main.xml文件:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  >

  <textview
    android:id="@+id/textview1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="使用gson进行json数据的处理"
    android:textcolor="#353535"
    android:textsize="17sp"
    android:textstyle="bold"
    android:layout_margintop="20dip" />

  <button
    android:id="@+id/bt_shititojson"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="实体类转换为json数据" 
    android:layout_margintop="10dip" />

  <button
    android:id="@+id/bt_jsontoshiti"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="json数据转换成实体类"
    android:onclick="bt_create_student"
    android:layout_margintop="10dip" />
  <button
    android:id="@+id/bt_listtojson"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="存有实体类的集合转换为json数据集合"
    android:layout_margintop="10dip" />

  <button
    android:id="@+id/bt_jsontolist"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="json数据集合转换为存有实体类的集合"
     android:layout_margintop="10dip" />



</linearlayout>

这个demo太简单了,估计没有人会导入到eclipse看结果吧,如果导入的话,使用的时候需要注意一点,就是点第一个按钮才能开始点第二个按钮,点第三个按钮才能开始点第四个按钮,不然会报错,原因我就不解释了,在代码里自己看吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网