2017-04-03 106 views
0

目標是數據庫行轉換爲保存的遊戲快照谷歌Play遊戲服務,然後檢索這些行並把它們插入數據庫行轉換爲字節數組,回保存的遊戲快照一個可以打開保存的遊戲快照的輔助設備。如何使用谷歌Play遊戲服務

我能夠使用基本的字符串數據保存並從Google Play遊戲服務中檢索快照,但是如何將數據庫行存儲到字節數組中(使用Google Play遊戲服務存儲快照數據需要使用字節數組)並返回一個保存的遊戲快照?謝謝。

+0

請糾正我,如果我錯了 是您的問題找到一種方法在內存中代表一個數據庫記錄作爲一個byte [],並獲取回從字節[]數據庫記錄? –

+0

正確,我正在尋找最佳方式。如果有最佳實踐或標準方法來做到這一點,只需最少的轉換。謝謝。 – John

回答

1

既然你問的方式表示內存數據庫記錄作爲一個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 [],你可以創建聯繫人模型的一個實例,並添加儘可能多的接觸中,然後爲聯繫人實例做系列化只有一次。

+0

如果我正確理解上述內容,我需要將聯繫人對象的每個實例存儲到它自己的字節數組中。我僅限於單個字節數組用於將快照保存到Google Games Services,我如何將多個數據庫行存儲到單個字節數組中並返回,謝謝。 – John

+0

這很簡單,我會更新上面的答案。 –

+2

您可能想看看JSON序列化與對象序列化。類似於http://www.studytrails.com/java/json/java-google-json-serializing-collections/優點是序列化的字節更小,反序列化與用於讀取的java類不緊密相關它。這樣,如果你讓你的遊戲的新模式,你不需要保留老班的序列化的兼容版本讀取玩家的舊數據。 –