2011-06-02 19 views
3

私はシンプルなゲームを作成しました。最後にユーザーの名前とスコアが最高スコアのリストに入るはずです。このため私はsharedpreferencesにこれらのデータを保存したいと思います。私は投稿を見て、私はそれを私のアプリに適用しようとしているが、強制的に閉じる。これが私がしている正しいことなのかどうか分かりません。だから、私はこれらのキーペア(プレーヤー、スコア)をarraylistに入れます。そこから私はリストビューに値を得ることができます。 これは単なる例です。私にとってarraylistにAndroid sharedpreferences

SharedPreferences.Editor scoreEditor = myScores.edit(); 
     scoreEditor.putString("PLAYER", "Thomas"); 
     scoreEditor.putString("SCORE", "5"); 
     scoreEditor.commit(); 


     final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 
     Map<String, ?> items = myScores.getAll(); 

     for(String s : items.keySet()){ 
      HashMap<String,String> hmap = new HashMap<String,String>(); 
      hmap.put("PLAYER", s); 
      hmap.put("SCORE", items.get(s).toString()); 

      LIST.add(hmap); 
     } 

     Toast.makeText(Start.this, "LIST size: "+LIST.size(), Toast.LENGTH_LONG).show(); 

それはまた、私はこのように、これらのデータを保存する場合は大丈夫だろう:

scoreEditor.putString("DATA", "Thomas" + "-" + "5"); 

ArrayList<String> LIST = new ArrayList<String>();

にそれを置くが、私はどのように行うのか分かりません。

皆さん、お手伝いできますか?

編集:私はHaphazardが示唆したように別の方法をとることができました。私はこのコードをまとめましたが、これを行う方法であるかどうかはわかりません。私はまだそれをテストしていません.sgはsharedpreferencesに間違っており、私はまだそれを理解しようとしています。

SharedPreferences.Editor scoreEditor = myScores.edit(); 
scoreEditor.putString("DATA", "Thomas" + "-" + "5"); 
scoreEditor.commit(); 


HashSet<String> hset=new HashSet<String>(); 
hset.addAll((Collection<? extends String>) myScores.getAll()); 

ArrayList<String> LIST = new ArrayList<String>(hset); 
+0

強制終了したら、最初にlogcatを見て、問題がどこにあるのか、そして強制終了する例外の性質を確認する必要があります。 – Snicolas

答えて

3

SharedPreferencesEditorリストを受け入れていないが、それはSetsを受け入れません。リストをHashSetなどに変換して同様のものを保存することができます。あなたがそれを読んだら、それをArrayListに変換し、必要に応じてそれを並べ替えればよいです。

あなたの"Thomas" + "-" + "5"設定に従わなければならないように、セットはストリングのセットでなければならないことに注意してください。

編集:あなたの新しいアップデートするには、私はこのコードがテストされていない

//Retrieve the values 
Set<String> set = new HashSet<String>(); 
set = myScores.getStringSet("key", null); 

//Set the values 
Set<String> set = new HashSet<String>(); 
set.addAll(listOfExistingScores); 
scoreEditor.putStringSet("key", set); 
scoreEditor.commit(); 

のようなものの多くを考えていたが、それは

EDITを動作するはずです:あなたのAPIレベルは、get/setStringSet()レベル以下である場合これを試すことができます:

1)ハイスコアのリストを区切り文字列に変換します。つまり、「Tom、1」、「Ed、5」があれば、それをループして「Tom、1 | Ed、5」のような文字列にすることができます。 setString(..)を使用して簡単に保存できます。

2)値を読み取る場合は、getString(..)を実行してからString.split("|")を実行して元のリストを元に戻します。まあ、それは配列を返しますが、それは十分に簡単にリストに変換することができます。

+0

これはスタートです。私はメインポストを更新しました。 – erdomester

+0

何を更新しましたか? – Haphazard

+0

今更新しました。申し訳ありませんが、sharedpreferences部分が強制的に閉じる結果となり、私はその理由を理解しようとしています。 – erdomester