无法为用户设置照片URI / 对象在位置上不存在

10 浏览
0 Comments

无法为用户设置照片URI / 对象在位置上不存在

我正在尝试在创建用户配置文件时使用setPhotoUri,我使用两个单独的方法,首先上传然后获取URL,两者都在“createUserWithEmailAndPassword”方法中调用,但是我收到了这个错误消息:com.google.firebase.storage.StorageException:对象不存在于位置。

我在这里这里这里找到了一些信息,尝试在我的代码中实现它,但是没有任何效果。

这是用于创建用户的方法:

 auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(SignupActivity.this, new OnCompleteListener() {
                        @Override
                        public void onComplete(@NonNull Task task) {
                            Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                            // 如果登录失败,向用户显示一个消息。 如果登录成功,
                            // 将通知auth状态监听器,并在监听器中处理已登录的用户的逻辑。
                            if (!task.isSuccessful()) {
                                Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
                                        Toast.LENGTH_SHORT).show();
                            } else {
                               user = auth.getCurrentUser();
                                if(user!=null){
                                    uploadImage();
                                    getImageUrl();
                                    UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                           .setPhotoUri(downloadUri)
                                            .setDisplayName(displayNameString).build();
                                    user.updateProfile(profileUpdates);
                                    FirebaseAuth.getInstance().signOut();
                                    Intent intent = new Intent(SignupActivity.this, LoginActivity.class);
                                    intent.putExtra("Email",user.getEmail());
                                    if (user.getPhotoUrl()!=null){
                                        intent.putExtra("Image",user.getPhotoUrl().toString());
                                    }
                                    startActivity(intent);
                                    Toast.makeText(SignupActivity.this, "Verifique su contraseña",
                                            Toast.LENGTH_SHORT).show();
                                }
                            }
                        }
                    });

这些是上传和获取URL的方法:

 private void uploadImage() {
    if(filePath != null)
    {
        ref = storageReference.child("UserProfileImages/"+user.getEmail() );
        ref.putFile(filePath); //我检查了我的项目,文件已成功上传。
    }
}

// 如果我使用ref.toString(),结果完全匹配我的项目中文件的路径

public void getImageUrl (){
    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Uri uri) {
             downloadUri = uri;// 我需要使用setPhotoUri为我的用户设置的字符串(文件链接)。
            Log.i("Class","Photo "+ downloadUri);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // 处理任何错误
            Log.i("Class","an error occurred "+ exception.toString());
        }
    });
    }

0
0 Comments

问题原因:无法为用户设置照片URI / 对象在指定位置不存在。

解决方法:为了避免出现这个错误信息,需要先上传文件,等待一段时间直到文件被存储,然后获取下载URL。

具体解决方法是通过为ref.putFile()方法添加一个oncompletelistener来解决这个问题。

以下是解决方法的示例代码:

ref.putFile(fileUri)

.addOnCompleteListener(new OnCompleteListener() {

@Override

public void onComplete(@NonNull Task task) {

if (task.isSuccessful()) {

// 文件上传成功

// 获取下载URL

ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(Uri uri) {

// 设置用户照片的URI

user.setPhotoUri(uri.toString());

}

});

} else {

// 文件上传失败

}

}

});

通过在上传文件的任务完成后添加一个监听器,在监听器的回调方法中获取下载URL,并将其设置为用户照片的URI,即可解决该问题。

0