Java 如何根据firebase实时数据库中的特定值显示android studio中的数据列表?

Java 如何根据firebase实时数据库中的特定值显示android studio中的数据列表?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,因此,我试图检索选择特定值的用户列表 这是我在Firebase中创建的数据库。我正试图打印在“providedServices”节点中选择“Food”选项的用户及其地址列表 我正在遍历数据库并尝试使用IF语句查找选择该选项的用户,但是,我被卡住了。下面是我的代码片段: 有人能帮我吗?顺便说一句,我是初学者,所以请对我放轻松:') 以下是FoodActivity页面,其中 public class FoodActivity extends AppCompatActivity { Da

因此,我试图检索选择特定值的用户列表

这是我在Firebase中创建的数据库。我正试图打印在“providedServices”节点中选择“Food”选项的用户及其地址列表

我正在遍历数据库并尝试使用IF语句查找选择该选项的用户,但是,我被卡住了。下面是我的代码片段:

有人能帮我吗?顺便说一句,我是初学者,所以请对我放轻松:')

以下是FoodActivity页面,其中

public class FoodActivity extends AppCompatActivity {

    DatabaseReference databaseDonors;

    ListView listViewDonors;

    List<Donors> donorsList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food);

        listViewDonors = (ListView) findViewById(R.id.listViewDonors);

        donorsList = new ArrayList<>();

    }

    public FoodActivity() {
    }

    @Override
    protected void onStart() {
        super.onStart();

        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference donorsRef = rootRef.child("donors");
        Query provideServicesQuery = donorsRef.orderByChild("provideServices").equalTo("Food");
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    Donors donors = ds.getValue(Donors.class);
                    donorsList.add(donors);
                    Log.d("TAG", donors.getDonorName());
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
            }
        };
        provideServicesQuery.addListenerForSingleValueEvent(valueEventListener);
        
    }
}

要仅获取将
providedevices
属性设置为“Food”的对象,必须使用以下代码行中的查询:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference donorsRef = rootRef.child("donors");
Query provideServicesQuery = donorsRef.orderByChild("provideServices").equalTo("Food");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Donors donors = ds.getValue(Donors.class);
            donorsList.add(donors);
            Log.d("TAG", donors.getDonorName());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
provideServicesQuery.addListenerForSingleValueEvent(valueEventListener);

除此之外,
donorsList
将填充
捐赠者
对象,您还将在logcat中看到所有将
providedevices
属性设置为“Food”的捐赠者的姓名。

嘿,Alex,我尝试了您的方法,但应用程序页面显示为空,即使在数据库中,已经有一些捐助者选择“食品”作为提供的服务:(在这种情况下,请编辑您的问题并添加您现在使用的确切代码,添加您的数据库的更详细的屏幕截图,并告诉我是否打印出了捐赠者的姓名。我已经编辑了问题。这有帮助吗?如果您需要更多详细信息,请务必让我知道:)另外,不,我认为捐赠者还没有打印在日志中。首先,将
捐赠者
中的所有属性设置为私有的
。要查看日志中是否打印了内容,请尝试通过
标记在Android Studio中搜索。如果它仍然不能工作。请添加一个更详细的屏幕截图,如之前所要求的。嘿神秘RO!我能帮你提供其他信息吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头下方的左侧。应该将颜色更改为绿色。我非常感谢。谢谢!
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference donorsRef = rootRef.child("donors");
Query provideServicesQuery = donorsRef.orderByChild("provideServices").equalTo("Food");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Donors donors = ds.getValue(Donors.class);
            donorsList.add(donors);
            Log.d("TAG", donors.getDonorName());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
provideServicesQuery.addListenerForSingleValueEvent(valueEventListener);