Получить данные определенного узла c по его уникальному идентификатору в базе данных android? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь получить данные только одного узла за раз по его уникальному идентификатору в виде списка. По сути, я принимаю заказы от разных пользователей и храню их в FireBase. вместо того, чтобы показывать все заказы определенного пользователя c, мой код показывает все заказы всем пользователям. Помогите мне решить эту проблему.

    listView = findViewById(R.id.List_view);

    databaseReference = FirebaseDatabase.getInstance().getReference("orders");
    studentsList = new ArrayList<>();
}

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

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

            for (DataSnapshot studentSnapshot : dataSnapshot.getChildren()){
                    UserHelperClassMain students = studentSnapshot.getValue(UserHelperClassMain.class);
                    studentsList.add(students);
                }

            StudentsInfoAdapter studentsInfoAdapter = new StudentsInfoAdapter(MyOrders.this,studentsList);
            listView.setAdapter(studentsInfoAdapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

StudentsInfoAdapter. java

private Activity context;
private List<UserHelperClassMain> studentsList;

public StudentsInfoAdapter(Activity context,List<UserHelperClassMain>studentsList){
    super(context, R.layout.myorders, studentsList);
    this.context = context;
    this.studentsList = studentsList;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View ListView = inflater.inflate(R.layout.myorders,null,true);

    TextView studentsname = (TextView)ListView.findViewById(R.id.order_number);
    TextView studentsmobile = (TextView)ListView.findViewById(R.id.order_status);

    UserHelperClassMain students = studentsList.get(position);
    studentsname.setText(students.getOrders());
    studentsmobile.setText(students.getOrderStatus());

    return ListView;
}

}

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Это сработало !!!

    databaseReference = FirebaseDatabase.getInstance().getReference("orders");
    //databaseReference.addListenerForSingleValueEvent(valueEventListener);

    Query query = FirebaseDatabase.getInstance().getReference("orders")
            .orderByChild("orders")
            .equalTo("-M3efgPdS4X1ZYCCZTTf");

    query.addListenerForSingleValueEvent(valueEventListener);

    studentsList = new ArrayList<>();
}
0 голосов
/ 30 марта 2020

Если вы хотите получить заказы для определенного пользователя c, используйте uid пользователя в качестве уникального ключа для хранения всех заказов, принадлежащих конкретному пользователю. после этого вы можете просто получить все заказы, принадлежащие пользователю, по их uid, например:

    databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

              if(dataSnapshot.hasChildren()){
//here you will get all orders for particular user
}
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...