2016-04-13 15 views
0

私はPlayerクラスに名前とスコアのarraylistを持っています。スコアはボタンで動的に追加されます。共有環境設定を使用して、主なアクティビティで作成したArraylist<Player> playersを保存します。私は成功していないいくつかのソリューションを試しました。Androidの共有設定 - クラスの配列リスト

リンク::私がこれまで試したどのような

Save ArrayList to SharedPreferences

私はObjectSerializerクラスを使用する場合、私は、インポートパッケージorg.apache.pig.impl.utilを傾けます。 WrappedIOExceptionは、そのパッケージにあるため

enter image description here

:これは、以下のようなエラーが出るようになります。

Tinydb: Tiny dbは良い解決策が好きでしたが、データを取得するとエラーが発生します。

public void putListObject(String key, ArrayList<Player> playerArray){ 
     checkForNullKey(key); 
     Gson gson = new Gson(); 
     ArrayList<String> playerStrings = new ArrayList<String>(); 
     for(Player player : playerArray){ 
      playerStrings.add(gson.toJson(player)); 
     } 
     putListString(key, playerStrings); 
    } 

    public ArrayList<Player> getListObject(String key, Class<?> mClass) { 
     Gson gson = new Gson(); 

     ArrayList<String> objStrings = getListString(key); 
     ArrayList<Player> objects = new ArrayList<Player>(); 

     for (String jObjString : objStrings) { 
      Object value = gson.fromJson(jObjString, mClass); 
      objects.add((Player) value); 
     } 
     return objects; 
    } 

public void putListObject(String key, ArrayList<Player> playerArray){ 
    checkForNullKey(key); 
    Gson gson = new Gson(); 
    ArrayList<String> playerStrings = new ArrayList<String>(); 
    for(Player player : playerArray){ 
     playerStrings.add(gson.toJson(player)); 
    } 
    putListString(key, playerStrings); 
} 

プレーヤークラス:

public class Player implements Serializable { 
    private String name; 
    private ArrayList<Integer> scores = new ArrayList<>(); 

    public Player(String name){ 
     this.name = name; 
    } 


    public ArrayList<Integer> getScores() { 
     return scores; 
    } 

    public void setScore(int score) { 
     scores.add(score); 
    } 

誰もが私のプレイヤーのArrayListを格納しretriveする方法についての良い解決策を持っている場合は

+0

'serialize'メソッドでは、赤い線で囲まれたコードを取り除きます。また、あなたは本当にそれを取り除くことができるように何かを返す必要はありません。 – 3kings

+0

私はtinyDbを使用していませんが、エラーが表示されたら、誰かがあなたを助けることができます。この情報をdbに格納することは、おそらく長期的には最良の解決策になるでしょう。 – codeMagic

+0

最も簡単な解決策は、sqliteデータベースを使用することです。あなたは共有の設定に大きなデータを格納することは非常に良い考えではありません..... – Opiatefuchs

答えて

1
を共有してくださいこれらは、私はJavaファイルから変更する方法です

共有環境設定に保存する前に、オブジェクトをJSONに変換してみてください。 GSONはそのための使いやすいツールです。

+0

例を示すことができます、私はGSONを試みたが成功していない – CookieMonster

0

私のプロジェクトでも同様の要件があり、GSONの助けを借りてそれを行うことができます。以下のサンプルコードを確認してください。

/** 
    * Remove preference value. 
    * 
    * @param mContext The context to use. Usually your {@link android.app.Application} 
    *     or {@link Activity} object. 
    * @param key  The name of the preference to put. 
    * <br><br> 
    * @return Returns true if preference value were successfully removed from 
    * persistent storage. 
    */ 
    public static <E>boolean putList(Context mContext, String key, List<E> objectList){ 
     return SharedPreferenceUtils.putString(mContext, key, new Gson().toJson(objectList)); 
    } 

    /** 
    * Remove preference value. 
    * 
    * @param mContext The context to use. Usually your {@link android.app.Application} 
    *     or {@link Activity} object. 
    * @param key   The name of the preference. 
    * <br><br> 
    * @return Returns true if preference value were successfully removed from 
    * persistent storage. 
    */ 
    public static <E>List<E> getList(Context mContext, String key){ 
     TypeToken<List<E>> token = new TypeToken<List<E>>() {}; 
     String json = SharedPreferenceUtils.getString(mContext, key, null); 
     List<E> objectList = new Gson().fromJson(json, token.getType()); 
     return objectList; 
    } 

例:SharedPreferenceUtilsチェックこのlinkの完全なソースコードについて

List<Player> list = new ArrayList<Player>(); 
list.add(player); 
putList(this, "j", list);//Store List to SharedPreference 

list = getList(this, "j");//Get List from SharedPreference 
Log.e("DATA", list.toString()); 

関連する問題