2015-10-04 53 views
0

持久性我仍然在LibGdx新的Android也编程..LibGdx数据与ArrayList的

我试图创建将用于数据存储在我的应用程序 类看起来像这样

package com.mygdx.hanoi.util; 

import java.util.Map; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Preferences; 

public class DataPersister2 { 

    public Preferences getOrCreatePreferences(String prefName){ 
     return Gdx.app.getPreferences(prefName + ".prefs"); 
    } 
    public Map getPreferencesData(Preferences prefName){ 
     return (Map) prefName.get(); //.get(key); 
    } 
    public void clearPreferences(Preferences prefName){ 
     prefName.clear(); 
    } 
    public void insertPreferences(Preferences prefName, Map data){ 
     prefName.put(data); 
     prefName.flush(); 
    } 
} 

的问题是,当我尝试使用这个类,并添加一个ArrayList为它创建一个偏好,它总是说,喜好为空

DataPersister2 hs = new DataPersister2(); 
     Preferences hScore = hs.getOrCreatePreferences("highScores"); 
     hs.clearPreferences(hScore); 

     // dummy test score data 
     ArrayList<String[]> hsFreeMode = new ArrayList<String[]>(); // declare apa yang mau ditaruh sini, biar ga error di kemudian method 
     hsFreeMode.add(new String[] {"luki", "5000"}); 
     hsFreeMode.add(new String[] {"laras", "3900"}); 

     ArrayList hsMoveMode = new ArrayList(); 
     hsMoveMode.add(new String[] {"cika", "6000"}); 
     hsMoveMode.add(new String[] {"cikoo", "1000"}); 

     Map hsMap = new HashMap(); 
     hsMap.put("freeMode", hsFreeMode); 
     hsMap.put("moveMode", hsMoveMode); 

     //hs.insertPreferences("highScores", hsMap); 
     hs.insertPreferences(hScore, hsMap); 

     // print out the data 
     Map data = hs.getPreferencesData(hScore); 
     Gdx.app.log("data print", "the free mode value is " + (String[]) data.get("freeMode")); 
     Gdx.app.log("Array List", "the arraylist contains" + hsFreeMode.get(0)[0]); 

每当我尝试从该类(在'数据打印'日志中)登录时,它总是表示空 但是,如果我直接从ArrayList(在'数组列表'日志中)记录它的值,则会出现值。

什么使它更奇怪的对我来说,如果我把它加入到这样的喜好之前更改地图值:

Map hsMap = new HashMap(); 
    hsMap.put("freeMode", "luki"); 
    hsMap.put("moveMode", "laras"); 

    //hs.insertPreferences("highScores", hsMap); 
    hs.insertPreferences(hScore, hsMap); 

和日志中的数据是这样的:

Gdx.app.log("data print", "the free mode value is " + data.get("freeMode")); 

显示的数据... 所以我现在很困惑,不能弄清楚(但)那里是我的问题..

任何帮助将不胜感激:)

回答

2

由于libgdx文档Preferences只支持字符串原始类型所以你不能只是把数组的喜好。你需要序列化它之前放置和反序列化后获取数据使用例如JSON

//adding to the preferences: 

    hsMap.put("freeMode", json.toJson(hsFreeMode)); 


    //and then: 

    Gdx.app.log("data print", "the free mode value is " + ((String[])json.fromJson(ArrayList.class, String[].class, (String)data.get("freeMode")).get(0))[0]); 
+0

啊..那是我的错误..谢谢! – thekucays