无法为用户设置照片URI / 对象在位置上不存在
无法为用户设置照片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()); } }); }
问题原因:无法为用户设置照片URI / 对象在指定位置不存在。
解决方法:为了避免出现这个错误信息,需要先上传文件,等待一段时间直到文件被存储,然后获取下载URL。
具体解决方法是通过为ref.putFile()方法添加一个oncompletelistener来解决这个问题。
以下是解决方法的示例代码:
ref.putFile(fileUri)
.addOnCompleteListener(new OnCompleteListener
@Override
public void onComplete(@NonNull Task
if (task.isSuccessful()) {
// 文件上传成功
// 获取下载URL
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener
@Override
public void onSuccess(Uri uri) {
// 设置用户照片的URI
user.setPhotoUri(uri.toString());
}
});
} else {
// 文件上传失败
}
}
});
通过在上传文件的任务完成后添加一个监听器,在监听器的回调方法中获取下载URL,并将其设置为用户照片的URI,即可解决该问题。