使用android检索firebase数据并按子级排序

使用android检索firebase数据并按子级排序,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,大家好,我正在尝试从firebase中检索数据,这些数据只以字母C开头,并按字母顺序排序,但当我运行程序时,它什么也不做,我可以毫无问题地检索所有房间。这是我的代码,请帮忙 public class RoomsActivity extends AppCompatActivity { private Button add_room; private EditText room_name; private ListView listView; private A

大家好,我正在尝试从firebase中检索数据,这些数据只以字母C开头,并按字母顺序排序,但当我运行程序时,它什么也不做,我可以毫无问题地检索所有房间。这是我的代码,请帮忙

public class RoomsActivity extends AppCompatActivity 
{
    private Button  add_room;
    private EditText room_name;

    private ListView listView;
    private ArrayAdapter<String> arrayAdapter;
    private ArrayList<String> list_of_rooms = new ArrayList<>();
    private String name;
    private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();
    private String user_name;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rooms);

        name = getIntent().getExtras().get("user_name").toString();
        getWindow().setBackgroundDrawableResource(R.drawable.back2);
        add_room = (Button) findViewById(R.id.btn_add_room);
        room_name = (EditText) findViewById(R.id.room_name_edittext);
        listView = (ListView) findViewById(R.id.listView);

        arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_of_rooms);

        listView.setAdapter(arrayAdapter);

        add_room.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Map<String,Object> map = new HashMap<String, Object>();
                map.put(room_name.getText().toString(),"");
                root.updateChildren(map);
            }
        });

        root.child("room_name").startAt("C").orderByKey().addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Set<String> set = new HashSet<String>();
                Iterator i = dataSnapshot.getChildren().iterator();

                while (i.hasNext()){
                    set.add(((DataSnapshot)i.next()).getKey());
                }

                list_of_rooms.clear();
                list_of_rooms.addAll(set);

                arrayAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Intent intent = new Intent(getApplicationContext(),Chat_Room.class);
                intent.putExtra("room_name",((TextView)view).getText().toString() );
                intent.putExtra("user_name",name);
                startActivity(intent);
            }
        });
    }
}
当我获取根目录时,所有数据都被检索

root.orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

    Set<String> set = new HashSet<String>();
    Iterator i = dataSnapshot.getChildren().iterator();

    while (i.hasNext()){
        set.add(((DataSnapshot)i.next()).getKey());
    }

    list_of_rooms.clear();
    list_of_rooms.addAll(set);

    arrayAdapter.notifyDataSetChanged();
}
root.orderByKey().addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Set=newhashset();
迭代器i=dataSnapshot.getChildren().Iterator();
while(i.hasNext()){
set.add(((DataSnapshot)i.next()).getKey());
}
列出所有房间。清除();
房间列表。添加所有(套);
arrayAdapter.notifyDataSetChanged();
}
我使用[firebase docs][1]作为参考,但无法使其工作

截图

根据
Java Admin
的文档,您可以做类似的事情,它也应该与
Android

对于以
C
开头的数据

恐龙ref.orderByKey().startAt(“C”).endAt(“C\uf8ff”)

\uf8ff
位于Unicode中的大多数常规字符之后,因此查询应匹配以
C
开头的所有值

很抱歉,如果它不起作用,我自己没有亲自尝试过

root.orderByKey().startAt("C").endAt("C\uf8ff").addValueEventListener(new ValueEventListener() {

在此处添加.endAt()时,它起到了作用。如果有人需要,它是一个解决方案。谢谢

您能附上Firebase数据的屏幕截图吗?@boonyakipitak screenshot added
root.orderByKey().startAt("C").endAt("C\uf8ff").addValueEventListener(new ValueEventListener() {