2017-02-11 207 views
1

自從我開始使用Firebase實時數據庫以來,瑣碎的任務變得越來越困難。將Firebase json轉換爲Java對象

我在Firebase DB中具有以下JSON結構。從Java

{ 
    "EmailId": "[email protected]", 
    "Locations": { 
     "-Kci2Ov9_lI2d5RUnvYT": { 
      "Latitude": "17", 
      "Longitude": "78", 
      "RecordedDateTime": "1254" 
     }, 
     "-Kci77tuFbWP5Vdt4keF": { 
      "Latitude": "17", 
      "Longitude": "78", 
      "RecordedDateTime": "1254" 
     } 
    }, 
    "MobileNumber": 1234567890, 
    "UserName": "Firstname Lastname" 
} 

我的火力點查詢返回一個DataSnapshot我知道包含上述結構。我有以下Java對象,我認爲它映射到上述結構。

public class User { 
    private String EmailId; 
    private String MobileNumber; 
    private String UserName; 
    private ArrayList<UserLocationInfo> userLocationInfos; 

    //Constructor, getters and setters are below. 
} 

但是,只要我嘗試使用以下代碼將DataSnapshot讀入此對象,代碼就會失敗。

dataSnapshot.getValue(User.class) 

錯誤:

com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String. 

請告知Java類和也是爲什麼我會得到這個皈依錯誤時火力地堡將數據存儲爲JSON它的值都是字符串?

+0

變化的ArrayList ...地圖<字符串,對象>的位置可以在您的POJO改變它的數據類型 – Linxy

回答

1

您的MobileNumber被保存爲一個長整型值,並且您試圖以String形式檢索它。

public class User { 
    private String EmailId; 
    private long MobileNumber; 
    private String UserName; 
    private ArrayList<UserLocationInfo> userLocationInfos; 

    //Constructor, getters and setters are below. 
} 

或者變成一個字符串在您的數據庫,通過添加引號:

"MobileNumber": "1234567890", 
"UserName": "Firstname Lastname" 
+0

我雖然一旦數據進入鍵值對DB,它會變成一個字符串 –

+0

是的,整個數據庫是一個單一的JSON文件(這基本上是一個結構化的字符串)。但是當你寫和/或讀數據時,數據必須有一個特定的數據類型。你可以看到所有支持的數據類型[這裏](https://firebase.google.com/docs/database/android/read-and-write#basic_write)。 –

+0

將內部列表映射到java類中的ArrayList變量。 –