在Firebase中搜索数据|安卓

时间:2018-03-27 12:01:15

标签: java android firebase firebase-realtime-database

我有app,我正在使用Firebase实时数据库。我需要从Search获取所有数据并使用以下代码:

      myRef = FirebaseDatabase.getInstance().getReference();
  Query query = myRef.orderByChild("Search");
  query.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
          GenericTypeIndicator<ArrayList<String>> t = new GenericTypeIndicator<ArrayList<String>>(){};
          test2 = dataSnapshot.getValue(t);

我需要在ArrayList中获取所有内容,但现在我得到的是异常

  

com.google.firebase.database.DatabaseException:期望列表   反序列化,但得到了一个java.util.HashMap类

数据库结构:

view structure

我该如何解决这个问题?我需要从Search中的ArrayList获取所有数据。 如果您需要,我可以发布活动和日志中的所有代码。

JSON:

{
  "Search" : [ "Eggs", "Milk", "Apples", "Carrot", "Sugar", "Potato" ]
}

1 个答案:

答案 0 :(得分:3)

假设object节点是Firebase数据库根目录的直接子节点,要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference searchRef = rootRef.child("object").child("Search");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String value = ds.getValue(String.class);
            list.add(value);
        }
        Log.d("TAG", list.toString());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
searchRef.addListenerForSingleValueEvent(valueEventListener);

输出将是:

Eggs
Milk
Apples
Carrot
Sugar
Potato