我想要得到的帖子ID,其中用户在即在我目前的情况下签署的,我需要这样的:“-Kqm0-HrwGNgDhvTqOjU”,因为当前的用户ID为“OiHtZxtLUeh63UzudUChEpSODPx2”
这样我就可以获得当前登录用户的名称
这是我的代码:
public class MyAccount extends AppCompatActivity {
private Button mSetupButton;
private EditText mSetupName;
private EditText mSetupBio;
private ImageButton mSetupImageButton;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private String mPostKey=null;
private DatabaseReference mDatabase;
private FirebaseDatabase mFirebasedatabase;
private DatabaseReference myRef;
private String userId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_account);
DatabaseReference mdatabaseR = FirebaseDatabase.getInstance().getReference().child("Profiles");
mAuth = FirebaseAuth.getInstance();
mFirebasedatabase=FirebaseDatabase.getInstance();
FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
//Toast.makeText(this, "" + currentFirebaseUser.getUid(), Toast.LENGTH_SHORT).show();
mSetupName = (EditText) findViewById(R.id.accountName);
mSetupBio = (EditText) findViewById(R.id.accountBio);
mSetupButton = (Button) findViewById(R.id.accountButton);
mSetupImageButton = (ImageButton) findViewById(R.id.accountImageButton);
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Profiles");
String user_id=mAuth.getCurrentUser().getUid();
DatabaseReference myRef=ref.child(user_id);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot objSnapshot: snapshot.getChildren()) {
String obj = objSnapshot.getKey();
Toast.makeText(MyAccount.this,obj, Toast.LENGTH_LONG).show();
String post_name = (String) objSnapshot.child("Name").getValue();
mSetupName.setText(post_name);
}
}
@Override
public void onCancelled(DatabaseError firebaseError) {
}
});
//Toast.makeText(MyAccount.this,user_id,Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:0)
你必须循环每个对象,如下所示:
ref.child('users').orderByChild('uid').equalTo('your_uid').on("value",
function(snapshot) {
console.log(snapshot.val());
});
答案 1 :(得分:0)
有两种解决方案:
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Profiles");
Query query = ref.orderByChild("uid").equalTo("OiHtZxtLUeh63UzudUChEpSODPx2");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot objSnapshot: snapshot.getChildren()) {
String obj = objSnapshot.getKey();
如果您拥有具有自然键的项目集合,则应将这些项目存储在其自然键下。因此,在一组用户中,将用户存储在他们的UID下:
profiles
OiHtZxtLUeh63UzudUChEpSODPx2
email: "..."
name: "..."
phone: "..."
UIDofuser2
email: "..."
name: "..."
phone: "..."
这有许多优点,其中一些是:
(对您而言最重要)您无需直接阅读即可访问用户,而无需查询:
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Profiles");
DatabaseReference userRef = ref.child("OiHtZxtLUeh63UzudUChEpSODPx2");
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String obj = objSnapshot.getKey();
在最后一个代码段中,您会注意到不再需要Query
,这可以提高代码的可伸缩性。虽然这可能不会对用户列表产生很大影响,但在其他情况下可能会有所不同。由于我们直接读取,我们也不再需要onDataChange()
中的循环,这提高了代码的可读性。