当前位置: 首页 > 知识库问答 >
问题:

从Firebase实时数据库中获取JSON数组。Android

朱啸
2023-03-14

我想从Firebase实时数据库中获取整个JSON数组。从实时数据库中提取数组并将其存储在自定义类的ArrayList中。

共有2个答案

戚建白
2023-03-14

首先,位置节点不是数组是一个在术语中保存其他位置对象的对象。其次,正如我在您的屏幕截图中看到的,您的数据库结构不太好。您的collion节点应该保存相同类型的对象。在您的情况下,它保存用户对象和位置对象。正如我所看到的,在您的位置对象中,您实际上是您的用户的坐标,为此我建议您将数据库结构更改为:

Firebase-root
    |
    --- collion
          |
          --- userId
                |
                --- email: "jawadkhant557@gmail.com"
                |
                --- id: "CQuL...ihq1"
                |
                --- name: "jawadkhan"
                |
                --- location
                      |
                      --- latitude: 31.54614619
                      |
                      --- longitude: 74.40240774

在这种情况下,当您想获取用户的纬度和经度时,只需使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("collion").child(uid).child("location");
uidRef.addListenerForSingleValueEvent(/* ... */);

假设您有一个名为Collion的模型类,它有三个字段emailidname位置map加上相应的getter,如果您想获取所有用户对象,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference collionRef = rootRef.child("collion");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Collion collion = ds.getValue(Collion.class);
            Log.d("TAG", collion.getName());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
collionRef.addListenerForSingleValueEvent(valueEventListener);
吴伟志
2023-03-14

使用此代码(带有地图的示例)

    Map<String, Place> placeMap;
    DatabaseReference places;
    ArrayList<Place> placeData;

在onCreate中

     database = FirebaseDatabase.getInstance();
     places = database.getReference("Place");
     placeMap = new HashMap<>();

创建方法(在firebase中获取数据)

    private void getAllMarkerPlace() {

            places.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

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

                        placeData = new ArrayList<>();
                        place = postSnapshot.getValue(Place.class);
                        placeMarker = new LatLng(Double.valueOf(place.getLat()), Double.valueOf(place.getLng()));
                        place.setLatLng(placeMarker);
                        placeData.add(place);
                        placeMap.put(place.getName(), place);


                        mMap.setOnInfoWindowClickListener(MapsActivity.this);
                        mMap.addMarker(new MarkerOptions()
                                .position(placeMarker)
                                .title(place.getName()));
                        mMap.setInfoWindowAdapter(MapsActivity.this);


                    }


                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }


            });

        }
 类似资料:
  • 我正在尝试获取我的用户名,并在应用程序打开时向他/她问好。但我无法根据某个用户的uid获取数据。当我运行应用程序时,祝酒词从未真正出现。 数据库结构 密码

  • 我正在寻找一种方法,以数组[]或字符串等格式从Firebase实时数据库获取数据。 我的数据库如下所示:链接到数据库的图像 或者:

  • 我试图在我的应用程序中创建一个搜索功能,它基本上根据用户的查询(如任何产品名称)过滤json数据(如产品列表),并显示最接近的结果。我已经成功实现了这个搜索栏和过滤逻辑,但它是在我的应用程序中我的产品列表的本地json数据上工作的。我想要的是从网络调用(http调用)中获取json数据,然后进行过滤。但是我的实时数据库中有数据,我不知道如何以json格式检索它们。我可以设置云函数(节点js)来将j

  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 我真的很难从数据库中收集数据。我正在使用实时数据库,我正在将这些值添加到一个可以单击的列表中。 当我单击列表上的用户时,我需要获取用户名值来创建聊天ID。这是我的问题,以获得键内的值。我现在的做法似乎行不通。 这是我的数据库 我需要取给“name”的值。 这是我的密码

  • 我有一个带有此模式的数据库: 我测试了这段代码,但我无法从数据库中获得任何消息。我会感谢你的帮助。