2011-06-02 117 views
3

我創建了一個簡單的遊戲。最後,用戶的名字和分數應該進入高分榜。爲此,我想將這些數據存儲在sharedpreferences中。我看到一篇文章,我正試圖將其應用到我的應用程序,但它強制關閉。我甚至不知道這是否正確。所以我把這些關鍵字(球員,比分)放入一個數組列表中。從那裏我可以得到列表視圖的值。 這只是一個例子。Android sharedpreferences into arraylist

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 2011-06-02 18:25:32

回答

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(); 

該代碼是未經測試,但它應該工作

編輯:如果你的API級別低於get/setStringSet()水平,那麼你可以試試這個:

1)把高分的列表變成一個分隔字符串。這意味着如果你有[「Tom,1」,「Ed,5」],你可以通過它循環並將它變成像「Tom,1 | Ed,5」這樣的字符串。您可以使用setString(..)輕鬆存儲。

2)當您想要讀回數值時,請執行getString(..),然後使用String.split("|")以獲取原始列表。那麼,它會返回一個數組,但它可以很容易地轉換爲列表。

+0

這是一個開始。我更新了主帖。 – erdomester 2011-06-02 19:42:55

+0

你更新了什麼? – Haphazard 2011-06-02 19:53:21

+0

我現在更新了。對不起,sharedpreferences部分導致強制關閉,我試圖找出原因。 – erdomester 2011-06-02 19:55:31