欢迎大家! 我在Anroid上编写了一款手机游戏。 我真的想知道如何保存播放器数据。 它将是一款可以在不同设备上运行而不会丢失数据的游戏。
- 使用SharedPreferences
- 使用JSONObject,JSONArray并将其保存到内部存储中的文件中并将其上传到外部服务器
- SQLite,MySQL
醇>
你会选择什么?每个选项的优缺点是什么?
我想保存数据,例如:
- 排行榜
- 生命
- 马纳岛
- 步数
- 角色等级
- 金额
- 以及......
醇>
答案 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有许多好处。
我不鼓励使用外部服务器,因为我个人不喜欢我的游戏需要上网才能玩。