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

我正在尝试从 firebase 动态检索数据并将它们显示在页面上,但是当我这样做时,没有错误但注意到屏幕上只是一个空屏幕(见下图)

http://img4.mukewang.com/61790b430001d7f506971120.jpg

任何人都可以帮助我吗?

这是我的Firebase数据库结构。

http://img4.mukewang.com/61790b5000016a1307430884.jpg

这是我的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){



            }

        });


    }





}


侃侃尔雅
浏览 148回答 2
2回答

眼眸繁星

问题在于使用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萌萌

要解决这个问题,只需移动以下代码行:adapter&nbsp;=&nbsp;new&nbsp;ArrayAdapter<Service>(this,&nbsp;R.layout.service_info,R.id.serviceInfo,list);就在之前:ListView.setAdapter(adapter);当你设置适配器时,你的列表是空的,这就是为什么屏幕是空的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java