Android - 保存播放器数据 - 3种不同选项的比较

时间:2016-03-14 19:43:00

标签: android arrays sharedpreferences

欢迎大家! 我在Anroid上编写了一款手机游戏。 我真的想知道如何保存播放器数据。 它将是一款可以在不同设备上运行而不会丢失数据的游戏。

  
      
  1. 使用SharedPreferences
  2.   
  3. 使用JSONObject,JSONArray并将其保存到内部存储中的文件中并将其上传到外部服务器
  4.   
  5. SQLite,MySQL
  6.   

你会选择什么?每个选项的优缺点是什么?

我想保存数据,例如:

  
      
  1. 排行榜
  2.   
  3. 生命
  4.   
  5. 马纳岛
  6.   
  7. 步数
  8.   
  9. 角色等级
  10.   
  11. 金额
  12.   
  13. 以及......
  14.   

2 个答案:

答案 0 :(得分:0)

这取决于玩家数据的数量。但除非有很多玩家数据,否则我建议使用共享首选项,特别是如果有像Player对象这样的简单事件或者Player对象列表。这将涵盖它。

您可以使用以下内容作为播放器列表,如果您只想保存1,则可以将对该列表的任何引用更改为Player对象。如果您有大量数据,播放器或需要额外的您可能希望使用SQLLite的安全性。

public class PlayerPrefs {

    private static final String PLAYERS_PREF_FILE = "PLAYERS_PREF_FILE";
    private static final String PLAYERS = "PLAYERS";

    private static SharedPreferences getPrefs(){
        final Context context = ApplicationData.getAppContext();
        return context.getSharedPreferences(PLAYERS_PREF_FILE, Context.MODE_PRIVATE);
    }

    public static List<Player> getPlayers() {
        final Gson gson = new Gson();
        Type listType = new TypeToken<ArrayList<Player>>() {}.getType();
        SharedPreferences prefs = getPrefs();
        String players = prefs.getString(PLAYERS, null);
        if (players == null){
            return new ArrayList<Player>();
        }
        return gson.fromJson(players, listType);
    }

    public static void setPlayers(List<Player> players) {
        final Gson gson = new Gson();
        if (players != null) {
            final SharedPreferences prefs = getPrefs();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString(PLAYERS, gson.toJson(players));
            editor.apply();
        }
    }
}

此外,您需要在Gradle文件中包含以下内容:

compile 'com.google.code.gson:gson:2.5'

答案 1 :(得分:0)

SharedPreferences应该是获得如此少量数据的方法。在这个例子中,使用它们比SQLite有许多好处。

我不鼓励使用外部服务器,因为我个人不喜欢我的游戏需要上网才能玩。