1

私の活動では、ユーザーは彼が選んだ画像の配列を持っており、それを好みに保存したいと思います。ユーザーがアクティビティを離れ、戻ってくると、まだロードされているイメージがImageViewにあります。私はこれを達成するためにGsonを使用しようとしていますが、問題があり、私が間違っていることを見ることができません。 外部からの洞察を期待すると、私が見ていないこの明らかな答えが私を助けてくれるかもしれません。アンドロイドでGsonからオブジェクトを保存および取得する方法は?

ありがとうございます。

ここまでは私のコードです。あなたがイメージのリストの中に文字列をデシリアライズするタイプが必要になり、データを取り出すの一部で

private void savePreferencesForImages(String key, ArrayList<Image> imageList) 
    { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     Gson gson = new Gson(); 
     String json = gson.toJson(imageList); 
     editor.putString(key,json); 
     editor.commit(); 
    } 


//Storing Local data. 
private void loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    Gson gson = new Gson(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    ArrayList<Image> images = gson.fromJson(gsonString, Image.class);//Ask StackOverflow tomorrow. 
} 
+0

'Image.class'は' ArrayList 'にロードできません。 –

+0

@ cricket_007よく私に3つの提案を与えました。私はその行にポップアップするエラーメッセージがあります。しかし、どのラインで確実に画像と呼ばれるArrayListが確保されているのか分かりません。画像はユーザの画像で​​埋められています。 1)変数 '画像'タイプを画像ライブラリに変更します。 2) '画像'タイプを画像ライブラリに移行します 3) 'fromJson'を作成するとjava.util.ArrayListが返されます – TheQ

+0

@ cricket_007重複した回答とは思われません。それはJsonオブジェクトをArrayListに変換します。 – TheQ

答えて

1

...

のように:あなたが行うことができます

private void loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    Gson gson = new Gson(); 
    Type type = new TypeToken<List<Image>>() {}.getType(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    List<Image> images = gson.fromJson(gsonString, type); 
} 
+0

"リーダー"とは何でしょうか?リスト images = gson.fromJson(reader、type); – TheQ

+0

大丈夫です、私はこれを試してみます。 – TheQ

+0

ありがとう、それは働いた! – TheQ

1

一つですイメージを個別に保存し、検索時にArrayListにロードします。

private void savePreferencesForImages(ArrayList<Image> imageList) 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    Gson gson = new Gson(); 
    int imgKey = 0; 
    for (Image img: imageList) { 
     String json = gson.toJson(imageList); 
     editor.putString("" + imgKey,json); 
     editor.commit(); 
     imgKey++; 
    } 
} 


private ArrayList<Image> loadPreferences() 
{ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    Gson gson = new Gson(); 
    Map<String, ?> allPrefs = sharedPreferences.getAll(); 
    String gsonString = sharedPreferences.getString("userImages", ""); 
    ArrayList<Image> images = new ArrayList<Image>(); 
    if (!allPrefs.isEmpty()) { 
     for (Map.Entry<String, ?> entry : allPrefs.entrySet()) { 
      String json = entry.getValue().toString(); 
      Image temp = gson.fromJson(json, Image.class); 
      images.add(temp); 
     } 
    } 
    return images; 
} 

これは潜在的にこのことについてに行くための最もオーバー複雑な方法ですが、それは私が考える可能性が最初のものです。独自のImageManagerクラスなどを作成し、getImage(key)メソッドなどでArrayListの動作をエミュレートすることもできます。これにより、ArrayListを保存しようとしたときに発生する複雑さが解消されます。

+0

ええ私もその方法に遭遇しました(そして、解決に感謝します)。そこで、Gsonライブラリを使用しました。複雑なデータ型を数行のコードで共有の環境設定に入れることができます。これが必要な場合は、使用することを強くお勧めします。 – TheQ

関連する問題