我有一个应用程序设置,我通过谷歌登录验证用户。如果用户正确验证,将允许用户进入下一个活动。除了名称,该帐户中用户的电子邮件和个人资料图片也会保存到Firebase。
现在的问题是,我能够将名称和电子邮件存储到Firebase,但我无法将配置文件图像直接从URL保存到Firebase。
GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
String F_name = acct.getDisplayName();
String L_name = acct.getFamilyName();
String email = acct.getEmail();
final Uri photo = acct.getPhotoUrl();
final StorageReference FILEPATH = FirebaseStorage.getInstance().getReference().child("Profile images/"+email +".jpg");
FILEPATH.putFile(photo).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Map<String, Object> profileToSave = new HashMap<>();
profileToSave.put("Profile Pic",photo.toString());
docRef.set(profileToSave).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
startActivity(new Intent(getApplicationContext(),profile.class));
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
});
}
});
以下几行来自我得到的错误
E/UploadTask: could not locate file for uploading:
E/StorageException: StorageException has occurred.
An unknown error occurred, please check the HTTP result code and inner exception for server response. Code: -13000 HttpResult: 0
E/StorageException: No content provider:
期待尽快提出任何建议。如果有人得到解决方案或其他方法,请告诉我。谢谢
简短的回答是,你不能......但实际上,没有太多理由。如果您有网址,则可以使用该网址,因此无需将文件上传到Firebase。我建议您只需将URL存储在实时数据库中。现在,要与电子邮件/密码用户(在帐户创建时不自动拥有个人资料图片)同步,并允许用户更新他们的个人资料图片:
让用户设置他们的个人资料图片(通过将图像上传到Firebase存储)。上传完成后,获取下载URL(存储参考!)并在实时数据库中更新photoUrl。
请参阅下面的代码:
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.d(TAG, "before onSuccess: " + user.getPhotoUrl());
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setPhotoUri(uri).build();
user.updateProfile(profileUpdates);
Log.d(TAG, "after onSuccess: " + uri);
//add new photoUrl to db
databaseReference.child("photoUrl").setValue(uri.toString());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure:" + e);
}
});