gpt4 book ai didi

java - 如何通过在 Firebase 中搜索特定节点来添加现有文档中的数据? (安卓)

转载 作者:行者123 更新时间:2023-12-02 00:58:33 25 4
gpt4 key购买 nike

有一份文件是学生文件,其中包含类(class)、用户名、状态等学生数据。我想通过搜索 emailid 在现有文档中添加另一个名为 uid 的节点

例如,在包含 emailid 的文档中:“abc@gmail.com”,我想在包含 emailid 的文档中添加 uid:“111032”。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference studentRef = rootRef.child("STUDENT");

lg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
username = un.getText().toString().trim();
String password= pw.getText().toString().trim();
lg.setText("Logging in...");
firebaseAuth.signInWithEmailAndPassword(username, password)
.addOnCompleteListener(Welcome.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
firebaseAuth = FirebaseAuth.getInstance();
final String current_user_id = firebaseAuth.getCurrentUser().getUid();
//Save UID to database
Query emailAddressQuery = studentRef.orderByChild("emailid").equalTo(username).limitToFirst(1);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> uidUpdate = new HashMap<String, Object>();
uidUpdate.put("uid", current_user_id);
ds.getRef().updateChildren(uidUpdate);
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!

}
};
emailAddressQuery.addListenerForSingleValueEvent(valueEventListener);
Intent i=new Intent(Welcome.this,Home.class);
// i.putExtra("useremail", username);
startActivity(i);
lg.setText("Log In");
} else {
Toast.makeText(getApplicationContext(), "Log In Failed", Toast.LENGTH_SHORT).show();
lg.setText("Log in");
}

// ...
}
});
}
});

上面的代码实际上是在登录按钮中,用户登录时获取 uid 并将其保存到特定个人资料的信息中。 this is the image with more detailed information .

As shown in this image ,我想通过 emailid 进行搜索(以黄色显示)并在该特定文档中添加名为 uid 的节点。

旧代码:

username = un.getText().toString().trim();
firebaseAuth = FirebaseAuth.getInstance();
String current_user_id = firebaseAuth.getCurrentUser().getUid();
ref= FirebaseDatabase.getInstance().getReference().child("STUDENT").child(username);
Map<String, Object> updates = new HashMap<String, Object>();
updates.put("uid", current_user_id);
ref.updateChildren(updates);

这段代码可以工作,但是我们必须传递文档的名称,而我想通过文档中的子节点传递数据。

最佳答案

要解决此问题,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference studentRef = rootRef.child("STUDENT");
Query emailAddressQuery = studentRef.orderByChild("emailid").equalTo("abc@gmail.com").limitToFirst(1);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> uidUpdate = new HashMap<String, Object>();
uidUpdate.put("uid", uid);
ds.getRef().updateChildren(uidUpdate).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("TAG", "task is successful!");
} else {
Log.d("TAG", task.getException().getMessage());
}
}
});
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
}
};
emailAddressQuery.addListenerForSingleValueEvent(valueEventListener);

此操作的结果将是用户对象中uid的更新。

关于java - 如何通过在 Firebase 中搜索特定节点来添加现有文档中的数据? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61010014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com