Java 在Firebase Android上更新用户配置文件
我在更新用户配置文件时遇到问题。在本例中,我将更新用户的两个字段(位置和可用性)。它们的数据类型为布尔型。请帮助了解如何更新用户配置文件。我的方法如下:Java 在Firebase Android上更新用户配置文件,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我在更新用户配置文件时遇到问题。在本例中,我将更新用户的两个字段(位置和可用性)。它们的数据类型为布尔型。请帮助了解如何更新用户配置文件。我的方法如下: private void updateProfile() { final Boolean isAvailable = swIsAvailable.isChecked(); final Integer spinnerIndex = spLocation.getSelectedItemPosition(); final Bo
private void updateProfile() {
final Boolean isAvailable = swIsAvailable.isChecked();
final Integer spinnerIndex = spLocation.getSelectedItemPosition();
final Boolean location;
if(spinnerIndex == 0){
location = false;
}else {
location =true;
}
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
User updateUser = new User();
updateUser.isAvailable = isAvailable;
updateUser.where = location;
user.updateProfile(updateUser).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(UpdateActivity.this, "User Updated", Toast.LENGTH_SHORT).show();
}
});
}
如上的Firebase文档所示,您需要构建一个
UserProfileChangeRequest
。从文档中:
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates=新建UserProfileChangeRequest.Builder()
.setDisplayName(“Jane Q.User”)
.setPhotoUri(Uri.parse(“https://example.com/jane-q-user/profile.jpg"))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标签“用户配置文件更新”);
}
}
});
将以下方法添加到用户类:
public class User {
// ... your class props and constructors here
// add this method
@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();
if(fullName != null)
result.put("fullName", fullName);
if(phoneNumber != null)
result.put("phoneNumber", phoneNumber);
if(carName != null)
result.put("carName", carName);
if(email != null)
result.put("email", email);
if(isAvailable != null)
result.put("isAvailable", isAvailable);
if(where != null)
result.put("where", where);
if(uriImage != null)
result.put("uriImage", uriImage);
return result;
}
}
公共类用户{
//…您的类道具和构造函数在这里
//添加此方法
@排除
公共地图toMap(){
HashMap结果=新建HashMap();
if(全名!=null)
结果。输入(“全名”,全名);
如果(电话号码!=null)
结果。输入(“电话号码”,电话号码);
if(carName!=null)
结果。放置(“carName”,carName);
如果(电子邮件!=null)
结果。放入(“电子邮件”,电子邮件);
如果(isAvailable!=null)
结果。put(“isAvailable”,isAvailable);
if(其中!=null)
结果。放置(“where”,where);
if(uriImage!=null)
结果。放置(“uriImage”,uriImage);
返回结果;
}
}
并更新您想要的任何道具,如下所示:
User u = new User();
u.isAvailable = false; // new values go here
u.where = true; // new values go here
Map<String, Object> newUserValues = u.toMap();
reference.child(user.getUid()).updateChildren(newUserValues).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// successfully updated
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// failed to update
// handle error here
}
});
User u=新用户();
u、 isAvailable=false;//这里有新的价值观
u、 其中=true;//这里有新的价值观
Map newUserValues=u.toMap();
reference.child(user.getUid()).updateChildren(newUserValues).addOnSuccessListener(newOnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
//成功更新
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//更新失败
//在这里处理错误
}
});
其中reference
是FirebaseDatabase.getInstance().getReference(“用户”)代码>
而user
是FirebaseAuth.getInstance().getCurrentUser()代码>您共享的代码有什么问题?例如:如果您在调试器中逐行遍历此代码,那么哪一行不符合您的预期?在这一行“user.updateProfile(updateUser).addOnCompleteListener”updateUser请求添加“UserProfileChangeRequest”我不知道该做什么:(我建议您遵循此处提供的文档:。它向您展示了如何构建UserProfileChangeRequest
我试图理解这篇文章,但理解不太清楚。请您进一步解释一下,好吗?我将非常感谢您的帮助。我在下面写了一个答案。但如果有什么不清楚的地方,您必须更明确地说明wasn不清楚。如果不知道到底是什么让您感到困惑,我们不可能比官方文档更好地解释某些内容。好吧,在我的情况下,我应该在SetDisplayName中写些什么我将更新两个文件你希望更新Firebase用户配置文件的其他属性是什么?我将更新用户集合项的子项(where和isAvailable)这些不是可以存储在用户Firebase身份验证配置文件中的属性,因此您不能将它们传递到调用User.updateProfile
。哇,您是我的英雄,我已经尝试了一周的解决方案。您做得很好。谢谢
public class User {
// ... your class props and constructors here
// add this method
@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();
if(fullName != null)
result.put("fullName", fullName);
if(phoneNumber != null)
result.put("phoneNumber", phoneNumber);
if(carName != null)
result.put("carName", carName);
if(email != null)
result.put("email", email);
if(isAvailable != null)
result.put("isAvailable", isAvailable);
if(where != null)
result.put("where", where);
if(uriImage != null)
result.put("uriImage", uriImage);
return result;
}
}
User u = new User();
u.isAvailable = false; // new values go here
u.where = true; // new values go here
Map<String, Object> newUserValues = u.toMap();
reference.child(user.getUid()).updateChildren(newUserValues).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// successfully updated
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// failed to update
// handle error here
}
});