Получить ключ справочной формы Firebase Realtime Database - PullRequest
0 голосов
/ 24 апреля 2018

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

Правильно, результат выглядит так:

enter image description here enter image description here

Это то, что я хотел бы иметь (с соответствующим Toastконечно):

enter image description here

MainActivity

public class MainActivity extends AppCompatActivity {
    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    private DatabaseReference mUsersDatabase;
    private DatabaseReference mUsersDatabase1;
    private Toolbar mToolbar;
    private String item;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAuth = FirebaseAuth.getInstance();
        mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
        mToolbar.setTitleTextColor(Color.WHITE);
        setSupportActionBar(this.mToolbar);
        getSupportActionBar().setTitle("TestApp");

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid(); 
        mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);

        mUsersDatabase1 = FirebaseDatabase.getInstance().getReference().child("Users");

    }

Метод броскаслучайных имен пользователей

public void getRandomUsernames(){

        mUsersDatabase1.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<String> userlist = new ArrayList<String>();
                for(DataSnapshot dsp : dataSnapshot.getChildren()){
                    userlist.add(String.valueOf(dsp.getValue()));
                }

                Object randomitem = userlist.get(new Random().nextInt(userlist.size()));
                Toast.makeText(getBaseContext(), randomitem.toString(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

Все, что я пробовал, не сработало.Любые предложения приветствуются

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

, чтобы получить ключ, просто сделайте это:

   DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");

reference.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
   String keys=datas.getKey();
  }
 }
@Override
public void onCancelled(DatabaseError databaseError) {
  }
});

Цикл for позволит вам выполнять итерации внутри случайного ключа. Это String keys=datas.getKey(); вернет ключ.

public String getKey ()

имя ключа для исходного местоположения этого снимка

подробнее здесь:

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#getKey()

0 голосов
/ 24 апреля 2018

Вы пробовали getKey ()?

public void onDataChange(DataSnapshot dataSnapshot) {
    ArrayList<String> userlist = new ArrayList<String>();
    ArrayList<String> keylist = new ArrayList<String>();
    for(DataSnapshot dsp : dataSnapshot.getChildren()) {
        userlist.add(String.valueOf(dsp.getValue()));
        keylist.add(dsp.getKey());
    }
    int randpos = new Random().nextInt(userlist.size());
    Object randomitem = userlist.get(randpos);
    String key = keylist.get(randpos);
    Toast.makeText(getBaseContext(), randomitem.toString() + " key:" + key, Toast.LENGTH_LONG).show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...