2017-05-17 17 views
0

編輯:想出來,檢查我發佈的答案,如果你有類似的問題。Firebase數據庫錯誤 - 反序列化期望地圖,但得到了一個類java.util.ArrayList

我知道有關於這個問題的幾個問題,但他們的解決方案都沒有爲我工作。

在我的模型類中,我已經確保使用List而不是Arraylist來避免Firebase問題,但仍然會出現此錯誤。這是很多代碼,但大多數問題都要求提供所有的代碼,所以我會公佈所有代碼。

TemplateModelClass.java

// 

我已經成功地使用這種基本模式多次。對於

HashMaps<String, List<String>>, 

字符串是一個遞增的整數轉換爲字符串。列表只是列表中的字符串。以下是來自Firebase的一些示例JSON:

// 

格式化爲儘可能最好。如果你需要它的照片讓我知道,我會得到一個截圖

和我得到這個錯誤,在標題中說:

com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.util.ArrayList 

這個最upvoted的問題,似乎有什麼東西處理使用整數作爲關鍵的問題,但我想我總是使用轉換爲字符串的整數來避免這種情況。它可能會奇怪地解釋它,所以我會在此期間嘗試更多的東西。謝謝閱讀!

+0

從firebase中導出json並將其發佈到此處 –

回答

0

好吧,想通了。如果有人讀這個問題有這個問題,並使用遞增的ints/longs /無論轉換爲字符串,你必須添加一些字符到轉換後的int。如果可以轉換,Firebase顯然會將這些密鑰轉換回非字符串。

例如,如果你做這樣的事情:

int inc = 0; 
inc++; // 1 
map.put(String.valueOf(inc), someList); 

火力地堡的解釋是關鍵的1而不是 「1」。

因此,強制的FB解讀爲此作爲一個字符串,做這樣的事情:

int inc = 0; 
inc++; // 1 
map.put(String.valueOf(inc) + "_key", someList); 

,一切工作很完美。顯然,如果您還需要將這些字符串讀回整數,只需將字符串拆分爲「[_]」即可。

1

主要問題是您正在使用List而不是Map。正如你的錯誤所述,在反序列化的過程中,它需要Map,但發現它是ArrayList

所以爲了解決這個問題,你幾乎需要改變模型中的所有名單與地圖是這樣的:

private Map<String, Object> mMapOne; 

改變所有的Fileds這樣後,你也需要改變你的公共settersgetters

希望它有幫助。

相關問題