Android Firebase, Получить положение ключа в узле - PullRequest
0 голосов
/ 04 мая 2018

Я хочу получить данные в соответствии с рейтингом пользователя. Сначала упорядочите по баллам пользователя и получите положение пользователя в узле Но я не могу придумать, как это реализовать.

Первый Это мой пользовательский узел firebase enter image description here

Возможно, это будет похоже на 'databaseRef.child ("users"). OrderByChild ("points") ... " Я не знаю отсюда.

пс. Это не пятое. Это «где находится предмет» (предмет №)

Спасибо!

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Это можно сделать, добавив ctr в ваш цикл dataSnapshot

myRef = FirebaseDatabase.getInstance().getReference().child("users");
final Query query = myRef.orderByChild("points");
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        int total = dataSnapshot.getChildrenCount();
        int i = 0;
        // loop through dataSnapshot
        for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
            String nickName = childSnapshot.child("nickName").getValue(String.class);
            if (nickName.equals(mUser.getNickName()) {
                //when nickName would match
                int userPlace = total - i;
                int points = childSnapshot.child("points").getValue(Interger.class);

                //do something here
                break;
            } else {
                i++;
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
0 голосов
/ 04 мая 2018

Я решаю эту проблему. Android_K.До ответ правильный. Я добавляю некоторый код в его код. Поскольку база данных Firebase не дает нисходящий запрос.

final Query query = databaseReference.child("users").orderByChild("points");
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                int i = 0;
                int all = (int) dataSnapshot.getChildrenCount();
                Log.d(TAG, "all: " + all);
                for (DataSnapshot ds : dataSnapshot.getChildren()) {

                    String nickName = ds.child("nickName").getValue(String.class);
                    if (nickName.equals(user.getNickName())) {
                        Log.d(TAG, "nickName: " + user.getNickName());
                        int userPlace = i;
                        Log.d(TAG, "position: " + userPlace);
                        myInfoRankingNumTxt.setText(Integer.toString(all - (i)) + "위");
                        break;
                    } else {
                        i++;
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
0 голосов
/ 04 мая 2018

Пожалуйста, прочитайте

Функция обратного вызова получает DataSnapshot, который является снимком данные. Снимок - это изображение данных в конкретной базе данных. ссылка в один момент времени. Вызов val () / getValue () для снимок возвращает объектно-ориентированное представление объекта данные. Если в местоположении ссылки нет данных, снимок значение равно нулю.

Если вы хотите получить все points, отметьте это LOGIC .

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("products");
    ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    ArrayList<Integer> points = new ArrayList<>();
                    for (Map.Entry<String, Object> entry : products.entrySet()){
                        Map singleUser = (Map) entry.getValue();
                        points.add((Integer) singleUser.get("points"));
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    //handle databaseError
                }
            });
...