如何使用Google Play游戏服务将数据库行转换为字节数组并返回保存的游戏快照

时间:2017-04-03 16:05:03

标签: java android arrays google-play-games

目标是将数据库行转换为Google Play游戏服务的已保存游戏快照,然后检索这些行并将其插入可打开已保存游戏快照的辅助设备上。

我可以使用基本字符串数据保存和检索Google Play游戏服务的快照,但是如何将数据库行存储到字节数组中(使用Google Play游戏服务存储快照数据需要字节数组)回来保存游戏快照?谢谢你。

1 个答案:

答案 0 :(得分:1)

因为你要求一种方式将内存中的数据库记录表示为byte []。 如果我在你的位置,我会先做一个简单的建模,创建一个可以代表数据库记录内容的java类。

例如:

数据库记录: {id,firstName,lastName} 我只是创建一个java类作为这样的模型:

public class Contact {
    private long id;
    private String firstName;
    private String lastName;
// add getters and setters
}

现在,当您进行数据库查询并且有一条或多条记录时,可以为每条记录创建此模型的新实例,并从您拥有的记录中设置模型实例的内容。

Contact contact = new Contact();
contact.setFirstName("The first name from the database record");
//And so on.

现在将模型实例转换为byte []

ByteArrayOutputStream arrOutStream = new ByteArrayOutputStream();
try {
    ObjectOutputStream out = new ObjectOutputStream(arrOutStream);
    out.writeObject(contact);
    byte[] bytes = arrOutStream.toByteArray();
} catch (IOException e) {
    e.printStackTrace();
}

从字节[]

读取该对象
byte[] bytesToRead;
ByteArrayInputStream arrInStream = new ByteArrayInputStream(bytesToRead);
try {
    ObjectInputStream objectInStream = new ObjectInputStream(arrInStream);
    contact = (Contact) objectInStream.readObject();
} catch (Exception e) {
    e.printStackTrace();
}

现在,您拥有该模型,您可以将其放回数据库中。

如果您需要对数据库中的多个记录进行单个字节[],您只需创建一个包含联系人列表的新模型:

class Contacts {

    List<Contact> contactsList;
}

您可以只创建联系人模型的一个实例,并在其中添加尽可能多的联系人,然后仅为执行一次序列化,而不是将每个记录序列化为byte []。联系人实例。