目標是數據庫行轉換爲保存的遊戲快照谷歌Play遊戲服務,然後檢索這些行並把它們插入數據庫行轉換爲字節數組,回保存的遊戲快照一個可以打開保存的遊戲快照的輔助設備。如何使用谷歌Play遊戲服務
我能夠使用基本的字符串數據保存並從Google Play遊戲服務中檢索快照,但是如何將數據庫行存儲到字節數組中(使用Google Play遊戲服務存儲快照數據需要使用字節數組)並返回一個保存的遊戲快照?謝謝。
目標是數據庫行轉換爲保存的遊戲快照谷歌Play遊戲服務,然後檢索這些行並把它們插入數據庫行轉換爲字節數組,回保存的遊戲快照一個可以打開保存的遊戲快照的輔助設備。如何使用谷歌Play遊戲服務
我能夠使用基本的字符串數據保存並從Google Play遊戲服務中檢索快照,但是如何將數據庫行存儲到字節數組中(使用Google Play遊戲服務存儲快照數據需要使用字節數組)並返回一個保存的遊戲快照?謝謝。
既然你問的方式表示內存數據庫記錄作爲一個byte []。 如果我處於你的位置,我首先要做一個簡單的建模,創建一個java類,它可以表示數據庫記錄的內容。
例如:
數據庫記錄:{ID,名字,姓氏}我會簡單地創建一個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();
}
回來了,因爲你有你的模型可以把它放回你的數據庫。
如果需要從數據庫的多個記錄要這樣做成一個單一的byte [],你可以簡單地創建一個包含聯繫人列表的新模式:
class Contacts {
List<Contact> contactsList;
}
而不是串行化每個記錄成一個byte [],你可以創建聯繫人模型的一個實例,並添加儘可能多的接觸中,然後爲聯繫人實例做系列化只有一次。
如果我正確理解上述內容,我需要將聯繫人對象的每個實例存儲到它自己的字節數組中。我僅限於單個字節數組用於將快照保存到Google Games Services,我如何將多個數據庫行存儲到單個字節數組中並返回,謝謝。 – John
這很簡單,我會更新上面的答案。 –
您可能想看看JSON序列化與對象序列化。類似於http://www.studytrails.com/java/json/java-google-json-serializing-collections/優點是序列化的字節更小,反序列化與用於讀取的java類不緊密相關它。這樣,如果你讓你的遊戲的新模式,你不需要保留老班的序列化的兼容版本讀取玩家的舊數據。 –
請糾正我,如果我錯了 是您的問題找到一種方法在內存中代表一個數據庫記錄作爲一個byte [],並獲取回從字節[]數據庫記錄? –
正確,我正在尋找最佳方式。如果有最佳實踐或標準方法來做到這一點,只需最少的轉換。謝謝。 – John