SharedPreferenceに自作クラスオブジェクトを保存する方法(Gsonの使用方法) | Androidアプリ開発

通常、SharedPreferenceに保存できるデータ型は以下の5種類です。
  1. String型
  2. boolean型
  3. int型
  4. long型
  5. 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;
}
Androidアプリ開発
スポンサーリンク
Androidアプリ開発 記事一覧
Androidアプリ開発 記事一覧
Androidアプリ開発の記事一覧を以下にまとめています。
良かったらご覧ください。

Androidアプリ開発 記事一覧
カテゴリ広告: Androidアプリ開発
スポンサーリンク: Androidアプリ開発を個人レッスンで学ぶなら...?
Androidアプリ開発は一人で学んでいても限界があります。
そこでオススメなのがオンラインでAndroidアプリ開発を学べる「コードキャンプ」。
個人レッスンで丁寧に教えてくれます。

無料レッスン体験も可能なので、まずは無料体験から試してみてはいかがでしょうか?

Androidアプリ開発個人レッスン
一般広告: モバイルバッテリー
スポンサーリンク
Aresei-note
タイトルとURLをコピーしました