Чтобы решить эту проблему, используйте следующий код:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String data = (String) parent.getItemAtPosition(position);
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String dataUID = dataSnapshot.child("uid").getValue(String.class);
String dataUsername = dataSnapshot.child("username").getValue(String.class);
Intent intent = new Intent(Main2Activity.this, Main5Activity.class);
intent.putExtra("valueUID",dataUID);
intent.putExtra("valueName", dataUsername);
startActivity(intent);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
}
});
Вместо того, чтобы запрашивать всю базу данных, чтобы найти единственного пользователя, что является пустой тратой времени и ресурсов, вы можете получить ссылку на этого конкретного пользователя, используя его uid
. Поэтому нет необходимости использовать метод getChildren()
для циклического прохождения объекта DataSnapshot
, поскольку вы можете просто получить его без цикла. Это правда, метод onDataChange()
имеет асинхронное поведение, и весь код, касающийся намерения, должен быть помещен в обратный вызов. Если вы хотите использовать эти значения снаружи, я рекомендую вам посмотреть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова. Вы также можете взглянуть на это видео для лучшего понимания.