欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-22 21:09:10
这篇文章就是示范如何用gson把json数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包。直接贴代码了: import java.la...

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

这篇文章就是示范如何用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看结果吧,如果导入的话,使用的时候需要注意一点,就是点第一个按钮才能开始点第二个按钮,点第三个按钮才能开始点第四个按钮,不然会报错,原因我就不解释了,在代码里自己看吧。

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