我目前正在使用Firebase数据库处理项目,但无法将数据检索为列表。无法将列表检索到Firebase数据库
在这里,我已导入火力的JSON的示例:
{
"mood" : [ {
"date" : 1480625911154,
"reasons" : "Lorem Ipsum",
"status" : "Ok",
"user" : "812c3772-5e3b-4776-8b4c-41ee3047011d"
}, {
"date" : 1480626081958,
"reasons" : "Lorem Ipsum",
"status" : "Ok",
"user" : "3fca7432-ac0b-40f8-b898-929df4d3a2e8"
}, {
"date" : 1480626567674,
"reasons" : "Lorem Ipsum",
"status" : "Ok",
"user" : "22e9254a-161b-4126-8cd2-7e5ebe03fa6f"
} ]
}
进入我的Android应用程序,我想用下面的查询和代码的特定用户获取数据(它是在科特林) :
FirebaseDatabase.getInstance().getReference("mood").orderByChild("user").equalTo("fa224092-2dfa-49c4-9fb6-c63eccf61a8b").addListenerForSingleValueEvent(object : ValueEventListener
{
override fun onCancelled(error: DatabaseError)
{
}
override fun onDataChange(snapshot: DataSnapshot)
{
moods = snapshot.getValue(object : GenericTypeIndicator<List<Mood>>(){
})
}
})
凡moods
声明为:private var moods = emptyList<Mood>()
和Mood
类(这是JAVA):
@IgnoreExtraProperties
public final class Mood
implements Serializable
{
public String user;
public String status;
public String reasons;
public long date;
public Mood()
{
super();
}
public Mood(String user, String status, String reasons, long date)
{
this.user = user;
this.status = status;
this.reasons = reasons;
this.date = date;
}
}
每次,对DataSnapshot
转化到一个列表与下列堆栈跟踪应用程序崩溃:
十月12日至2日:20:01.497 22282-22282/com.test.app E/AndroidRuntime :致命 EXCEPTION:主进程:com.test.app,PID:22282 com.google.firebase.database.DatabaseException:期望一个列表,而 反序列化,但在com.google获得类java.util.HashMap 。 android.gms.internal.zzbqi.zza(Unknown Source) at com.google.android.gms.internal.zzbqi.zza(Unknown Source) at com.google.android.gms.internal.zzbqi.z ZA(来源不明) 在com.google.firebase.database.DataSnapshot.getValue(来源不明) 在com.test.app.fragment.StatsFragment $ onRetrieveBusinessObjects $ 1.onDataChange(StatsFragment.kt:46) 在com.google .firebase.database.Query $ 1.onDataChange(Unknown Source) at com.google.android.gms.internal.zzbmz.zza(Unknown Source) at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source ) at com.google.android.gms.internal.zzboc $ 1.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java :95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)
我不明白为什么一个HashMap
检索......事实上,在以前的项目,与类似的代码,火力地堡给我一个lsit预期。
为了做一个比较,这里是前一个项目的代码(在java中)。
{
"books" : [ {
"cartoonist" : "Test1",
"id" : "10",
"image" : "http://static.fnac-static.com/multimedia/Images/FR/NR/22/e1/7e/8315170/1507-1.jpg",
"price" : "15.95",
"publication" : "2016-11-01T00:00:00+01:00",
"summaryExtract" : "Loremp Ipsum",
"summaryFull" : "Loremp Ipsum",
"tome" : "Tome 24 : Le testament de William S"
}, {
"cartoonist" : "Riad Sattouf",
"id" : "1",
"image" : "http://static.fnac-static.com/multimedia/Images/FR/NR/da/9d/7c/8166874/1507-1.jpg",
"price" : "20.90",
"publication" : "2016-10-01T00:00:00+01:00",
"summaryExtract" : "Loremp Ipsum",
"summaryFull" : "Loremp Ipsum",
"tome" : "Tome 3 : L'Arabe du futur"
}]
}
下面的代码(在Java),查询火力地堡:
已导入到火力地堡数据库中的JSON
FirebaseDatabase.getInstance().getReference().child("books").addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
final List<Book> books = dataSnapshot.getValue(new GenericTypeIndicator<List<Book>>()
{
});
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
而且Book
类的代码:
@IgnoreExtraProperties
public final class Book
implements Serializable
{
public String id;
public String title;
public String tome;
public String cartoonist;
public String publication;
public String price;
public String image;
public String summaryFull;
public String summaryExtract;
public Book()
{
super();
}
public Book(String id, String cartoonist, String image, String price, String publication, String summaryExtract,
String summaryFull, String title, String tome)
{
this.id = id;
this.cartoonist = cartoonist;
this.image = image;
this.price = price;
this.publication = publication;
this.summaryExtract = summaryExtract;
this.summaryFull = summaryFull;
this.title = title;
this.tome = tome;
}
@Exclude
public String getFormattedDate()
{
final DateTime dateTime = new DateTime(publication);
return dateTime.monthOfYear().getAsText(Locale.getDefault()) + " " + dateTime.getYear();
}
该代码按预期工作。
我错过了Firebase数据库中的查询吗?有没有可能将我的数据检索为列表而不是散列表?
谢谢你的帮助!
谢谢你,它的工作原理!所以问题是为什么我的代码在一个项目中工作,而不是另一个.. :) – rolandl