Android Firebase检索数据

Android Firebase检索数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在我的Android应用程序中,我试图从Firebase后端获取活动用户列表。用户作为名为UserActive的Java类保存在Firebase中,该类包含有关用户的详细信息 我认为我做的一切都很好,但我犯了一个错误,应用程序崩溃了。我的代码: ChildEventListener activeUserschildEventListener = new ChildEventListener() { @Override public void onC

在我的Android应用程序中,我试图从Firebase后端获取活动用户列表。用户作为名为
UserActive
的Java类保存在Firebase中,该类包含有关用户的详细信息

我认为我做的一切都很好,但我犯了一个错误,应用程序崩溃了。我的代码:

ChildEventListener activeUserschildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {

                    UserActive uA = userSnapshot.getValue(UserActive.class);

                    Toast.makeText(MapsActivity.this, uA.getUsername(), Toast.LENGTH_LONG).show();

                }

            }
我的错误消息:

FATAL EXCEPTION: main
Process: shomrim.warpcodes.com.shomrim, PID: 28835
    com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type shomrim.warpcodes.com.shomrim.UserActive
    at com.google.android.gms.internal.zzaln.zzd(Unknown Source)
    at com.google.android.gms.internal.zzaln.zzb(Unknown Source)
    at com.google.android.gms.internal.zzaln.zza(Unknown Source)
    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
    at shomrim.warpcodes.com.shomrim.MapsActivity$2.onChildAdded(MapsActivity.java:195)
    at com.google.android.gms.internal.zzahe.zza(Unknown Source)
    at com.google.android.gms.internal.zzaje.zzcta(Unknown Source)
    at com.google.android.gms.internal.zzajh$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)
我的Firebase结构如下所示:

显然,对于
UserActive
类,我缺少了一些东西。如果可以的话,请帮助我。谢谢

我的UserActive类:

package shomrim.warpcodes.com.shomrim;

import android.location.Location;

/**
 * Created by Gil on 09/18/16.
 */

public class UserActive {

    String username;
    Location userlocation;
    String usericoninmap;
    String userphonenumber;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Location getUserlocation() {
        return userlocation;
    }

    public void setUserlocation(Location userlocation) {
        this.userlocation = userlocation;
    }

    public String getUsericoninmap() {
        return usericoninmap;
    }

    public void setUsericoninmap(String usericoninmap) {
        this.usericoninmap = usericoninmap;
    }

    public String getUserphonenumber() {
        return userphonenumber;
    }

    public void setUserphonenumber(String userphonenumber) {
        this.userphonenumber = userphonenumber;
    }
}
我的数据库参考:

groupPosShareRef = mRootRef.child("groups")
        .child(currentUserGroupsString)
        .child("groupPosData");
从Firebase导出的JSON(删除
userlocation
部分后:

"groups" : {
    "-KRietwzwz_5c2oGI0Z8" : {
      "groupPosData" : {
        "DDJxiDshfwbJFLxHXnMg7V5fHqy1" : {
          "username" : "username"
        }
      }
我试图将
UserActive
POJO更改为不包含Location对象的POJO,而是一个简单的lat和lon字符串。它被称为
UsersActive

package shomrim.warpcodes.com.shomrim;

/**
 * Created by user on 10/02/16.
 */

public class UsersActive {

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUserlat() {
        return userlat;
    }

    public void setUserlat(String userlat) {
        this.userlat = userlat;
    }

    public String getUserlon() {
        return userlon;
    }

    public void setUserlon(String userlon) {
        this.userlon = userlon;
    }

    public String getUsericoninmap() {
        return usericoninmap;
    }

    public void setUsericoninmap(String usericoninmap) {
        this.usericoninmap = usericoninmap;
    }

    public String getUserphonenumber() {
        return userphonenumber;
    }

    public void setUserphonenumber(String userphonenumber) {
        this.userphonenumber = userphonenumber;
    }

    String username;
    String userlat;
    String userlon;
    String usericoninmap;
    String userphonenumber;

}
但应用程序仍会在同一行中崩溃,并出现相同的错误:

            UsersActive uA = userSnapshot.getValue(UsersActive.class);
新的Firebase JSON:

"groups" : {
    "-KRietwzwz_5c2oGI0Z8" : {
      "groupPosData" : {
        "DDDDDDD" : {
          "username" : "username1"
        },
        "DDJxiDshfwbJFLxHXnMg7V5fHqy1" : {
          "username" : "username2"
        }
      }
解决了

问题是我使用了ChildEventListener,而我应该使用简单的ValueEventListener

当我意识到我得到的数据比我需要的数据“太深”了一步时,我明白了这一点

谢谢Nishant的帮助!

解决了这个问题

问题是我使用了ChildEventListener,而我应该使用简单的ValueEventListener

当我意识到我得到的数据比我需要的数据“太深”了一步时,我明白了这一点


感谢Nishant提供的所有帮助!

请发布您的用户活动java代码谢谢Nishant。现在,因为它不起作用,我没有填写“String usericoninmap,String userphonenumber”字符串。但我不认为这是问题所在。在添加此侦听器的位置也共享您的数据库ref。我认为ref中存在不匹配,您的pojomy理论是我需要迭代用户ID(在图像中,带有“DDJx…”的行),但我不确定如何执行。databaseref:groupPosShareRef=mRootRef.child(“groups”).child(currentUserGroupsString).child(“groupPosData”);请发布您的用户活动java代码谢谢您Nishant。现在,因为它不起作用,我没有填写“String usericoninmap,String userphonenumber”“字符串。但我不认为这是问题所在。在添加此侦听器的位置也共享您的数据库ref。我认为ref中存在不匹配,您的pojomy理论是我需要迭代用户ID(在图像中,带有“DDJx…”的行),但我不确定如何做。databaseref:groupPosShareRef=mRootRef.child(“groups”).child(currentUserGroupsString).child(“groupPosData”);我很高兴您意识到这是一个数据库结构缺陷造成的。在此处阅读有关结构化数据的更多信息-我很高兴您意识到这是一个数据库结构缺陷造成的。在此处阅读有关结构化数据的更多信息-