为了账号安全,请及时绑定邮箱和手机立即绑定

从 Android 中的 Firebase 实时数据库检索 ListView 上的数据不起作用

从 Android 中的 Firebase 实时数据库检索 ListView 上的数据不起作用

侃侃尔雅 2021-10-27 13:57:07
我正在尝试从 firebase 动态检索数据并将它们显示在页面上,但是当我这样做时,没有错误但注意到屏幕上只是一个空屏幕(见下图)任何人都可以帮助我吗?这是我的Firebase数据库结构。这是我的java代码:package com.example.atheer.booklyv1;import android.app.ListActivity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.google.firebase.database.DataSnapshot;import com.google.firebase.database.DatabaseError;import com.google.firebase.database.DatabaseReference;import com.google.firebase.database.FirebaseDatabase;import com.google.firebase.database.ValueEventListener;import java.util.ArrayList;public class orgServices extends AppCompatActivity {ListView ListView;FirebaseDatabase database;DatabaseReference ref;ArrayList<Service> list;ArrayAdapter<Service>  adapter;Service ser;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_org_services);        ser = new Service();        ListView = (ListView) findViewById(R.id.ListView);        database = FirebaseDatabase.getInstance();        ref =database.getReference().child("client");        list = new ArrayList<>();        adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);        ref.addValueEventListener(new ValueEventListener(){            @Override            public void onDataChange(DataSnapshot dataSnapshot){for(DataSnapshot ds: dataSnapshot.getChildren()){    if (dataSnapshot.hasChild("services")){    ser= ds.getValue(Service.class);    list.add(ser);}}ListView.setAdapter(adapter);            }            @Override            public void onCancelled(DatabaseError databaseError){            }        });    }}
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

问题在于使用dataSnapshot. 你在做什么是,如果你发现与名称的子services试图从当前获得的数据dataSnapshot中Services.class。


您应该做的是,正确设置databaseReference您选择的孩子。


因此,您可以在if语句中试试这个,而不是您用来检索的代码:


String name = dataSnapshot.child("name").getValue(String.class);

String name = dataSnapshot.child("price").getValue(Integer.class);

String name = dataSnapshot.child("rating").getValue(Integer.class);

String name = dataSnapshot.child("totalpoint").getValue(Integer.class);

但是,如果您想在不设置不同getValue()语句的情况下获取所有值,则可以使用map此方法。这可以帮助您同时更新和检索数据库中的值。


您可以参考以下链接以了解有关FirebaseDatabase使用map.


查看完整回答
反对 回复 2021-10-27
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

要解决这个问题,只需移动以下代码行:

adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);

就在之前:

ListView.setAdapter(adapter);

当你设置适配器时,你的列表是空的,这就是为什么屏幕是空的。


查看完整回答
反对 回复 2021-10-27
  • 2 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信