Android-保存玩家数据-3种不同选项的比较

Android-保存玩家数据-3种不同选项的比较,android,arrays,sharedpreferences,Android,Arrays,Sharedpreferences,欢迎大家! 我正在Anroid上编写一个手机游戏。 我真的很想知道如何保存玩家数据。 这将是一款可以在不同设备上运行而不会丢失数据的游戏 使用SharedReference 使用JSONObject、JSONArray并将其保存到内部存储器中的文件中,然后将其上载到外部服务器 SQLite,MySQL 你会选择什么?每种选择的优缺点是什么 我想保存数据,例如: 高分 生活 法力 步数 品级 金额 还有更多 这取决于将有多少玩家数据。但是,除非有很多玩家数据,否则我建议使用共享偏好,特别是如果有一

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

  • 使用SharedReference
  • 使用JSONObject、JSONArray并将其保存到内部存储器中的文件中,然后将其上载到外部服务器
  • SQLite,MySQL
  • 你会选择什么?每种选择的优缺点是什么

    我想保存数据,例如:

  • 高分
  • 生活
  • 法力
  • 步数
  • 品级
  • 金额
  • 还有更多

  • 这取决于将有多少玩家数据。但是,除非有很多玩家数据,否则我建议使用共享偏好,特别是如果有一些简单的东西,比如玩家对象或玩家对象列表。那就够了

    您可以对玩家列表使用如下内容,如果只想保存1,可以将对该列表的任何引用更改为仅一个玩家对象。如果您有大量数据、播放器或需要额外的安全性,您可能希望使用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();
            }
        }
    }
    

    共享引用应该是处理如此少量数据的方式。在本例中,在SQLite上使用它们有很多好处


    我不鼓励使用外部服务器,因为我个人不希望我的游戏需要互联网才能玩。

    我觉得最好解释更多关于玩家数据的信息,让人们能够为你提供更好、更定制的答案。我编辑了一个问题。查找。所有这些信息都可以包含在玩家对象中。目前,这将不是多人游戏。一个播放器一个设备。我希望将数据保存到外部,因为如果我在智能手机上玩游戏,现在我想在ma平板电脑上玩,数据必须从外部服务器下载。那么这是一个完全不同的问题。如果您希望从外部加载并从集中位置访问它,则需要在服务器上设置web服务,至少为播放器对象设置一个get and set服务。但在设置之前,为了跨会话维护播放器数据,我建议您使用上面的解决方案。我在服务器上有外部服务,它通过PHP脚本与客户端应用程序通信。我有一个表“用户”,其中包含播放器数据,但应用程序需要注册/登录播放器的internet访问。外部服务器就像备份服务器。在这种情况下,您可以使用它,但不能依赖它。使用外部服务器进行某种备份,这样用户可以切换到其他设备并传输进度,但也要确保使用SharedRefers在本地保存副本,因为没有internet连接无法玩游戏是一种糟糕的用户体验。是的,我知道:)那么您更喜欢SharedReference,是吗?例如,我登录到我的应用程序,一些数据正在从服务器下载。我把这些数据放到SharedReferences文件中,我可以通过所有应用程序对其进行操作?当然可以。它们非常容易使用,而且实际上可以在其中保存大量原始数据(如您所说的、高分、进度、硬币等)。在外部服务器中,我需要为用户数据创建其他表,或者我可以对现有表进行操作,但我需要添加一些新列,如。进步、高分等。?
    compile 'com.google.code.gson:gson:2.5'