Java addChildEventListener在addValueEventListener提供datasnapshot的值时显示错误。为什么?
数据库结构是 此listner为模型类提供了值Java addChildEventListener在addValueEventListener提供datasnapshot的值时显示错误。为什么?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,数据库结构是 此listner为模型类提供了值 ref.child(stateName).child(cityName).child("business").child(user).child("counter").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) {
ref.child(stateName).child(cityName).child("business").child(user).child("counter").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ShopCategoryModel Smodel = dataSnapshot.getValue( ShopCategoryModel.class);
servicetype = Smodel.getServicetype();
int orderleft = Smodel.getOrderleft();
int uploadsleft = Smodel.getUploadsleft();
int referralpionts = Smodel.getReferralpionts();
renewaldate = Smodel.getRenewaldate();
int vistors = Smodel.getVisitors();
int ratings = Smodel.getRatings();
ac_TotalVisitors.setText(""+vistors);
ac_ratingBar.setRating(Float.parseFloat(String.valueOf(ratings)));
ac_Shope_ratings.setText(""+ratings);
ac_orderleft.setText(""+orderleft);
ac_Uploadsleft.setText(""+uploadsleft);
ac_Referralpoints.setText(""+referralpionts);
ac_renewdate.setText(renewaldate);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
应用addChildEventListener时显示错误
ref.child(stateName).child(cityName).child("business").child(user).child("counter").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ShopCategoryModel Smodel = dataSnapshot.getValue( ShopCategoryModel.class);
servicetype = Smodel.getServicetype();
int orderleft = Smodel.getOrderleft();
int uploadsleft = Smodel.getUploadsleft();
int referralpionts = Smodel.getReferralpionts();
renewaldate = Smodel.getRenewaldate();
int vistors = Smodel.getVisitors();
int ratings = Smodel.getRatings();
ac_TotalVisitors.setText(""+vistors);
ac_ratingBar.setRating(Float.parseFloat(String.valueOf(ratings)));
ac_Shope_ratings.setText(""+ratings);
ac_orderleft.setText(""+orderleft);
ac_Uploadsleft.setText(""+uploadsleft);
ac_Referralpoints.setText(""+referralpionts);
ac_renewdate.setText(renewaldate);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
在这之后,我得到了这个错误
Process: mahendergarh.bhupendra.shaharseller, PID: 18837
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.Long to type mahendergarh.bhupendra.shaharseller.model.ShopCategoryModel
at com.google.android.gms.internal.adw.zzb(Unknown Source)
at com.google.android.gms.internal.adw.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at mahendergarh.bhupendra.shaharseller.Sign_in.Account$3.onChildAdded(Account.java:255)
at com.google.android.gms.internal.uv.zza(Unknown Source)
at com.google.android.gms.internal.aaf.zzIo(Unknown Source)
at com.google.android.gms.internal.aal.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
我在不同的时间使用每个侦听器。
请告诉我发生这种情况的原因,为什么我在addChildEventListener中遇到模型类错误。提前完成任务 A
ChildEventListener
为附加位置下的每个子项激发,而ValueEventListener
为位置本身激发
因此,如果将侦听器附加到数据库中的同一位置,则会使用节点的各个属性触发onchildaded
。因此,date
,orderLeft
,等等
如果您有一个查询或集合,而这里没有,您通常需要一个
ChildEventListener
。没有看到错误,您可以发布stacktrace吗?我只是添加了一个eRoom,或者因为我不知道firebase数据库的结构,您是否在onChildChanged()中尝试过相同的代码?是的,我在两个列表器中找到了相同的节点。。。。你现在可以看到我的结构了,所以我们无法用ChildEventListener查看Normal数据节点???但我想做些改变。我现在应该用什么?我不明白你想用ChildEventListener
实现什么。如果这有帮助:ValueEventListener.onDataChange
在附加侦听器时立即使用当前值激发。我想在onDataChange中设置一个条件(如果有其他条件),但ValueEvent的问题是,它会在每次创建acitvity时触发数据,并且该条件也会在数据库中没有任何数据更改的情况下开始工作,这就是我想使用“ChildEventListener”的原因。因此,建议我在活动重新启动时,立即对所有现有属性重新触发onchildaded
。因此,让我们忽略ChildEventListener
,它只对集合和查询有用,您现在正在尝试的也不是。您是否只希望在数据发生实际更改时获得回调?你是如何在你的应用程序中使用它的?您是否将当前值存储在某个位置?实际上,我的值已存储在数据库中。我想在活动开始时首先获取存储的值,我想在数据被更改时(当字符串被更改时)设置一个条件,如果(string.equals(“something”){do something})