gpt4 book ai didi

android - 使用 Room 数据库的 Google Play 游戏服务

转载 作者:行者123 更新时间:2023-12-05 06:05:17 27 4
gpt4 key购买 nike

我们有一个简单的问答游戏,目前使用 Room 数据库存储所有数据,包括用户进度。我们现在想集成 Google Play 游戏服务,将进度存储在云端,以便用户在更换设备或重新安装游戏时可以看到他们的进度。

目前我们在 xml 文件中有游戏类别和级别详细信息,然后在应用程序首次运行时对其进行解析并将数据存储在 Room 数据库中。

我们查看了游戏服务的文档,知道有这种方法可以保存游戏。

private Task<SnapshotMetadata> writeSnapshot(Snapshot snapshot,
byte[] data, Bitmap coverImage, String desc) {

// Set the data payload for the snapshot
snapshot.getSnapshotContents().writeBytes(data);

// Create the change operation
SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
.setCoverImage(coverImage)
.setDescription(desc)
.build();

SnapshotsClient snapshotsClient =
Games.getSnapshotsClient(this, GoogleSignIn.getLastSignedInAccount(this));

// Commit the operation
return snapshotsClient.commitAndClose(snapshot, metadataChange);
}

但问题是,这种方法需要字节来写入快照并且我们在 Room 数据库中有数据,我们可以从 Room db 传递数据还是必须更改本地数据库?

最佳答案

在写问题时,完全不清楚 byte[] data 是什么。使用 SnapshotsClientSnapshotMetadata (如文档所示,还有更多属性需要设置)。 String 可以很容易地转换为 byte[]。首先,您需要某种类型的 SaveGame 模型 - 可能是 Room @Entity;然后是 String & GSON可以提供byte[] getters/setters:

@Entity(tableName = "savegames")
public class SaveGame {

@PrimaryKey
public int id;
...

/** return a byte-array representation (this is probably what you're asking for). */
public byte[] toByteArray() {
return new Gson().toJson(this).getBytes();
}

/** TODO: initialize instance of {@link SaveGame} from a byte-array representation - so that it will work both ways. */
public void fromByteArray(byte[] bytes) {
SaveGame data = new Gson().fromJson(new String(bytes, StandardCharsets.UTF_8), SaveGame.class);
...
}
}

或者将byte[]传递给构造函数:

@Entity(tableName = "savegames")
public class SaveGame {

@PrimaryKey
public int id;
...

public SaveGame() {}

@Ignore
public SaveGame(byte[] bytes) {
SaveGame data = new Gson().fromJson(new String(bytes, StandardCharsets.UTF_8), SaveGame.class);
...
}
...
}

与此类似,无论是从 Room 还是从 SnapshotsClient 负载加载 SaveGame 都没有问题。即使不使用 Room,人们仍然需要方法来编码/解码快照的有效负载——无论游戏存档参数或格式如何。相反,我们可以只定义一个 byte[],其中每个数字都可以代表另一个保存游戏参数;这可能取决于要保存和恢复的负载的复杂程度。

关于android - 使用 Room 数据库的 Google Play 游戏服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66058113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com