【问题标题】:Creating a byte array from an SqliteDatabase to save it with Google Saved Games?从 SqliteDatabase 创建一个字节数组以使用 Google Saved Games 保存它?
【发布时间】:2020-11-27 12:29:20
【问题描述】:

我有一个游戏,我使用几个表格来存储玩家的进度。这是一个相当长的游戏,所以我时常收到合法的用户反馈,告诉我为什么我没有云保存选项?

因此,我确实使用 Google Play 游戏登录来获得成就,我想我也可以简单地实现 Google Saved Games,直截了当。

正如我所见,它使用一个简单的 byte[] 数组来从云端保存和加载游戏进程。(实际上是 Google Drive。)

我的问题是,如何创建一个byte[] 数组保存玩家保存的游戏实例的完整数据库?

我正在使用 Sqlite 数据库,例如:

private static DatabaseHelper mInstance = null;


private DatabaseHelper(Context context) {
    super(context, "duels_rpg_db", null, 123);
  

    this.ctx = context;

 
    getWritableDatabase();
}


public static DatabaseHelper getInstance(Context ctx) {

   
    if (mInstance == null) {
        mInstance = new DatabaseHelper(ctx.getApplicationContext());
    }
    return mInstance;
}

等等,没什么特别的。

提前致谢,

【问题讨论】:

    标签: android android-sqlite google-play-games


    【解决方案1】:

    如果您是 using C it would be easy to serialize the entire database,但在 Android 中,我认为您必须 locate the database file,使用 ByteArrayOutputStream 类将其转换为字节数组,将其存储在 Google Saved Games 中,然后再将字节数组转换回必要时归档。有关将文件转换为字节数组的示例,反之亦然see this link

    【讨论】:

      【解决方案2】:

      最好序列化您的用户数据而不是 db 文件。这样,如果您更新您的应用,您就不必担心在尚未更新的应用版本中使用更新版本的数据库。

      所以我建议将您的进度与 org.json.JSONObject 相互转换。 使用 JSON,很容易转换为带有 json.toString().getBytes("utf-8") 的 byteArray

      在获取数据时,您可以将其转换回 json 并使用 json 数据加载您的 sqlite db 的方法

      【讨论】:

      • 好主意,但只有在数据库很小的情况下才可以,而且我知道它永远不会变大。但现在我有 20 多张桌子。遗憾的是,编写序列化操作是不可能的。安全且无代码的版本是简单地抓取整个数据库并覆盖旧数据库。无论如何,我将不得不使用这两种方法来处理版本检查。
      • 我能理解! :) 然后这个链接我提供了关于如何自定义你的数据库文件的位置和访问/覆盖它的见解。 riptutorial.com/fr/android-sqlite/example/16326/…
      • 这不是问题的真正答案,但我最终使用了这个解决方案。 Sqlite 包装器是一个痛苦的 a**
      猜你喜欢
      • 2019-06-15
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多