我正在尝试从 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.
Cats萌萌
TA贡献1805条经验 获得超9个赞
要解决这个问题,只需移动以下代码行:
adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);
就在之前:
ListView.setAdapter(adapter);
当你设置适配器时,你的列表是空的,这就是为什么屏幕是空的。
添加回答
举报
0/150
提交
取消