GSON解析JSON保存到数据库

    xiaoxiao2021-04-12  39

    今天给大家带来的文章为通过Gson解析json数据并快速保存至数据库的文章。我们要保存是json对象数组,本文中的json数组并非从后台获取,为了演示,直接手动构造。

    需要保存到数据库的是手机的品牌和型号。所以,我们需要新建一个bean实体类去保存我们的型号和品牌。在这,我先介绍2个工具,一个是Google官方的Gson解析jar包。

    名为Gson.jar,这个百度下载就可以了。另外一个是序列化插件Parcelable。在setting---->>>>plugin----->搜索Parcelable。

    好了,下面新建我们的bean,取名DeviceModelBean.Java。添加属性后,右键选择Generate--->>>Parcelable,然后快速直接序列化,对bean我们最好养成习惯,先序列化。

    [java]  view plain  copy   package com.mero.wyt_register.bean;      import android.os.Parcel;   import android.os.Parcelable;      /**   * Created by chenlei on 2016/10/28.   */      public class DeviceModelBean implements Parcelable {          public String getBrand() {           return brand;       }          public void setBrand(String brand) {           this.brand = brand;       }          public String getModel() {           return model;       }          public void setModel(String model) {           this.model = model;       }          public String model;//型号       public String brand;//品牌       @Override       public int describeContents() {           return 0;       }          @Override       public void writeToParcel(Parcel dest, int flags) {           dest.writeString(this.model);           dest.writeString(this.brand);       }          protected DeviceModelBean(Parcel in) {           this.model = in.readString();           this.brand = in.readString();       }          public static final Parcelable.Creator<DeviceModelBean> CREATOR = new Parcelable.Creator<DeviceModelBean>() {           @Override           public DeviceModelBean createFromParcel(Parcel source) {               return new DeviceModelBean(source);           }              @Override           public DeviceModelBean[] newArray(int size) {               return new DeviceModelBean[size];           }       };   }  

    接下来,再看看我们的json字符串的内容。这个字符串是我按照预期目的而构造的。

    json字符串内容如下:

    [java]  view plain  copy   String jsonString = "[{\"brand\":\"华为\",\"model\":\"c8818\"},{\"brand\":\"华为\",\"model\":\"Y635\"}," +               "{\"brand\":\"华为\",\"model\":\"Y635-CL00\"},{\"brand\":\"华为\",\"model\":\"P8 Lite\"},{\"brand\":\"华为\",\"model\":\"荣耀X2\"}," +               "{\"brand\":\"华为\",\"model\":\"荣耀Hol-T00\"},{\"brand\":\"华为\",\"model\":\"荣耀3X畅玩版\"}," +               "{\"brand\":\"华为\",\"model\":\"荣耀6\"},{\"brand\":\"华为\",\"model\":\"荣耀4C\"},{\"brand\":\"华为\",\"model\":\"荣耀X3升级版\"}," +               "{\"brand\":\"华为\",\"model\":\"C8816\"},{\"brand\":\"华为\",\"model\":\"C8816D\"},{\"brand\":\"华为\",\"model\":\"Mate 7\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4C\"}," +               "{\"brand\":\"华为\",\"model\":\"荣耀7\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4C\"},{\"brand\":\"华为\",\"model\":\"荣耀7\"},{\"brand\":\"华为\",\"model\":\"荣耀4A\"}," +               "{\"brand\":\"华为\",\"model\":\"P8\"},{\"brand\":\"华为\",\"model\":\"C2900\"},{\"brand\":\"华为\",\"model\":\"Y320\"}," +               "{\"brand\":\"华为\",\"model\":\"C8815\"},{\"brand\":\"华为\",\"model\":\"Mate\"},{\"brand\":\"华为\",\"model\":\"Y600\"}," +               "{\"brand\":\"华为\",\"model\":\"荣耀6 Plus\"},{\"brand\":\"华为\",\"model\":\"C8817L\"},{\"brand\":\"华为\",\"model\":\"G5000\"}," +               "{\"brand\":\"华为\",\"model\":\"C8817E\"},{\"brand:\":\"华为\",\"model\":\"荣耀6X\"},{\"brand\":\"华为\",\"model\":\"P8 Lite\"}," +               "{\"brand\":\"华为\",\"model\":\"Ascend P8\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4X\"},{\"brand\":\"华为\",\"model\":\"G629\"},{\"brand\":\"华为\",\"model\":\"G620\"},{\"brand\":\"华为\",\"model\":\"荣耀X2\"}," +               "{\"brand\":\"华为\",\"model\":\"荣耀3C\"},{\"brand\":\"华为\",\"model\":\"荣耀6 Plus\"},{\"brand\":\"华为\",\"model\":\"C2800\"},{\"brand\":\"华为\",\"model\":\"2601\"},{\"brand\":\"华为\",\"model\":\"G610S\"}," +               "{\"brand\":\"华为\",\"model\":\"Ascend G302D\"},{\"brand\":\"华为\",\"model\":\"Ascend G6\"},{\"brand\":\"华为\",\"model\":\"Ascend G6\"},{\"brand\":\"华为\",\"model\":\"T8950N\"}," +               "{\"brand\":\"华为\",\"model\":\"G610\"},{\"brand\":\"华为\",\"model\":\"C8813DQ\"},{\"brand\":\"华为\",\"model\":\"Y618\"},{\"brand\":\"华为\",\"model\":\"G630\"}," +               "{\"brand\":\"华为\",\"model\":\"G521\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4\"}]";   仔细一看,其实就是一些对象数组,每个对象里面有2个元素,一个品牌,一个型号。

    接下来,咱们就需要把这些属性全部设置到对象数组里去。

    [java]  view plain  copy   java.lang.reflect.Type type = new TypeToken<List<DeviceModelBean>>(){}.getType();             Gson gson = new Gson();             listDeviceModel = gson.fromJson(jsonString,type);   上面三行就可以将我们的json数组设置到List<DeviceModelBean>数组里去。在这里说明一下上面的用法,Gson可以通过toJson和fromJson方法分别把对象拆分成json数组和把json数组设置到对象集合中。Type是个接口,位于java.lang.reflect包下。formJson通过传入json字符串数组和type的接口对象从而设置到对象中去。

    接下来,我们应该编写数据库帮助类和dao来完成数据库的操作。首先,我们先建立一个数据库帮助类DbHelper.java。

    [java]  view plain  copy   public class DbHelper extends SQLiteOpenHelper {       private Context context;       private  static final String dbName = "bbzs.db";       public DbHelper(Context context){           super(context,dbName,null,1);           this.context = context;       }          //创建表       @Override       public void onCreate(SQLiteDatabase db) {           String sql1 = "create table if not exists device_model_info(id integer primary key AUTOINCREMENT,model varchar(20),brand varchar(20))";           db.execSQL(sql1);       }       //删除数据库       public void deleteDb(){           context.deleteDatabase(dbName);       }       @Override       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {          }   }   我们可以通过创建DbHelper对象来创建一个数据库的实例和创建表。

    然后我们可以写我们的Dao。

    dao的完整代码如下:

    [java]  view plain  copy   public class DeviceModelDao {       public static final String TAG = "DeviceModelDao";       Context context;       SQLiteDatabase db;       List<DeviceModelBean> listDeviceModel = null;       public  DeviceModelDao(Context context){           this.context = context;       }       //Gson解析数组到对象中去       public List<DeviceModelBean>  addObjectToList(){           String jsonString = "[{\"brand\":\"华为\",\"model\":\"c8818\"},{\"brand\":\"华为\",\"model\":\"Y635\"}," +                   "{\"brand\":\"华为\",\"model\":\"Y635-CL00\"},{\"brand\":\"华为\",\"model\":\"P8 Lite\"},{\"brand\":\"华为\",\"model\":\"荣耀X2\"}," +                   "{\"brand\":\"华为\",\"model\":\"荣耀Hol-T00\"},{\"brand\":\"华为\",\"model\":\"荣耀3X畅玩版\"}," +                   "{\"brand\":\"华为\",\"model\":\"荣耀6\"},{\"brand\":\"华为\",\"model\":\"荣耀4C\"},{\"brand\":\"华为\",\"model\":\"荣耀X3升级版\"}," +                   "{\"brand\":\"华为\",\"model\":\"C8816\"},{\"brand\":\"华为\",\"model\":\"C8816D\"},{\"brand\":\"华为\",\"model\":\"Mate 7\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4C\"}," +                   "{\"brand\":\"华为\",\"model\":\"荣耀7\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4C\"},{\"brand\":\"华为\",\"model\":\"荣耀7\"},{\"brand\":\"华为\",\"model\":\"荣耀4A\"}," +                   "{\"brand\":\"华为\",\"model\":\"P8\"},{\"brand\":\"华为\",\"model\":\"C2900\"},{\"brand\":\"华为\",\"model\":\"Y320\"}," +                   "{\"brand\":\"华为\",\"model\":\"C8815\"},{\"brand\":\"华为\",\"model\":\"Mate\"},{\"brand\":\"华为\",\"model\":\"Y600\"}," +                   "{\"brand\":\"华为\",\"model\":\"荣耀6 Plus\"},{\"brand\":\"华为\",\"model\":\"C8817L\"},{\"brand\":\"华为\",\"model\":\"G5000\"}," +                   "{\"brand\":\"华为\",\"model\":\"C8817E\"},{\"brand:\":\"华为\",\"model\":\"荣耀6X\"},{\"brand\":\"华为\",\"model\":\"P8 Lite\"}," +                   "{\"brand\":\"华为\",\"model\":\"Ascend P8\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4X\"},{\"brand\":\"华为\",\"model\":\"G629\"},{\"brand\":\"华为\",\"model\":\"G620\"},{\"brand\":\"华为\",\"model\":\"荣耀X2\"}," +                   "{\"brand\":\"华为\",\"model\":\"荣耀3C\"},{\"brand\":\"华为\",\"model\":\"荣耀6 Plus\"},{\"brand\":\"华为\",\"model\":\"C2800\"},{\"brand\":\"华为\",\"model\":\"2601\"},{\"brand\":\"华为\",\"model\":\"G610S\"}," +                   "{\"brand\":\"华为\",\"model\":\"Ascend G302D\"},{\"brand\":\"华为\",\"model\":\"Ascend G6\"},{\"brand\":\"华为\",\"model\":\"Ascend G6\"},{\"brand\":\"华为\",\"model\":\"T8950N\"}," +                   "{\"brand\":\"华为\",\"model\":\"G610\"},{\"brand\":\"华为\",\"model\":\"C8813DQ\"},{\"brand\":\"华为\",\"model\":\"Y618\"},{\"brand\":\"华为\",\"model\":\"G630\"}," +                   "{\"brand\":\"华为\",\"model\":\"G521\"},{\"brand\":\"华为\",\"model\":\"荣耀畅玩4\"}]";           try{               java.lang.reflect.Type type = new TypeToken<List<DeviceModelBean>>(){}.getType();               Gson gson = new Gson();               listDeviceModel = gson.fromJson(jsonString,type);               Log.e("TAG",type+"");               for(Iterator iterator = listDeviceModel.iterator();iterator.hasNext();){                       DeviceModelBean bean = (DeviceModelBean) iterator.next();                       Log.e(TAG,bean.getModel()+bean.getBrand());               }           }catch (Exception e){               Log.e(TAG,"错误:"+e.getMessage());           }           return listDeviceModel;       }       //插入数据到数据库       public void insertModelToDb(List<DeviceModelBean> listDeviceModel){           try{                  DbHelper dbHelper = new DbHelper(context);               db = dbHelper.getWritableDatabase();               //开始事务               db.beginTransaction();               Log.e(TAG,listDeviceModel.size()+"");               String sql1 = "insert into device_model_info(id,model,brand) values (?,?,?)";               for(DeviceModelBean f :listDeviceModel){                   db.execSQL(sql1,new Object[]{null,f.model,f.brand});               }           }catch (Exception e){               e.printStackTrace();           }finally {               //提交               db.setTransactionSuccessful();               db.endTransaction();               db.close();              }          }   }   创建数据库的脚本为:

    [java]  view plain  copy   create table if not exists device_model_info(id integer primary key AUTOINCREMENT,model varchar(20),brand varchar(20))   执行插入的脚本为:

    [java]  view plain  copy   insert into device_model_info(id,model,brand) values (?,?,?)   这里注意的是第一个为主键id,这个必须得加上integer primary key 才会自动生成。另外,主键必须为null才可以,否则一直

    在代码中的用法为:

    [java]  view plain  copy   //创建数据库和表           DbHelper dbHelper = new DbHelper(MyApplication.getMyApplication());           //插入数据到数据库           DeviceModelDao dao = new DeviceModelDao(MyApplication.getMyApplication());           dao.insertModelToDb(dao.addObjectToList());  

    转载请注明原文地址: https://ju.6miu.com/read-667380.html

    最新回复(0)