- String型
- boolean型
- int型
- long型
- float型
しかし、以下のような複数の変数を持つクラスのオブジェクトを保存できると非常に便利です。
public class DataStruct {
public int Id;
public String Text;
}
それを可能にするライブラリがGoogleが公開しているGsonというライブラリです。
この記事ではGsonを使用して、
オブジェクトをSharedPreferenceに保存、SharedPreferenceから復元する方法を記載しています。
=== 目次 ===
Gsonライブラリとは?
公開ページ
以下のページで公開されています。https://github.com/google/gson
ライブラリを使用するとできること
このライブラリを使用すると以下のことができるようになります。- オブジェクトを文字列(JSON)に変換する
- 文字列(JSON)からオブジェクトへ復元する
SharedPreferenceを利用して保存/復元も可能となります。
ライセンス
ライセンスはApache 2.0で公開されています。Gsonの導入方法
Gsonはmavenに登録されているため、以下のコードをアプリのbuild.gradleへ追加することでプロジェクトへGsonを導入することができます。dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
Gsonの使用方法
オブジェクトをJSONに変換する
オブジェクトをJSONに変換するサンプルコードは以下です。DataStruct ds = new DataStruct();
ds.Id = 1;
ds.Text = "test";
Gson gson = new Gson();
String json = gson.toJson(ds);
JSONからオブジェクトを復元する
さきほどのJSONからオブジェクトを復元するサンプルコードは以下です。DataStruct ds2 = gson.fromJson(json, DataStruct.class);
ArrayListの場合は工夫が必要
ArrayListの場合には.classの書き方はできません。以下のように書く必要があります。
ArrayList<DataStruct> list = (ArrayList<DataStruct>) gson.fromJson(json, new TypeToken<ArrayList<DataStruct>>(){}.getType());
SharedPreferenceと組み合わせる
GsonをSharedPrefrenceと組み合わせてオブジェクトを保存してみましょう。オブジェクトを保存する場合にはGsonを使用してオブジェクトをJSONへ変換してString型でSharedPreferenceへ書き込みます。
オブジェクトを復元する場合にはSharedPreferenceからJSONを読み出し、Gsonを使用して復元します。
以下にサンプルコードとして保存と書込のメソッドを記載します。
SharedPreference sp = ...; //事前にSharedPrefereceのオブジェクトを取得しておく
Gson gson = new Gson();
void setDataStruct(DataStruct ds) {
String json = gson.toJson(ds);
SharedPreferece.Editor e = sp.edit();
e.putString("tag", json);
e.apply();
}
DataStruct getDataStruct() {
String json = sp.getString("tag", null);
return json==null ? new DataStruct() : gson.fromJson(json, DataStruct.class);
}
おまけ: 特定のメンバをJSON変換対象から外すには?
クラスの変数のうち、JSONへの変換対象から外す場合には以下のようにtransient接頭語を付与します。public class DataStruct {
transient int Id;
String Text;
}