Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Firebase Android上更新用户配置文件_Java_Android_Firebase_Firebase Authentication - Fatal编程技术网

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
    }
});