我有一个应用设置,我在其中通过Google登录对用户进行身份验证。如果用户正确进行身份验证,则将允许该用户进入下一个活动。以及该帐户的用户的名称,电子邮件和个人资料图像也将保存到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:
尽快期待的任何建议。让我知道,如果有一个人得到了解决或其他的方式做所以。谢谢
答案 0 :(得分:0)
简短的答案是您不能..但是实际上,没有太多理由。如果您拥有该URL,则可以使用它,因此无需将文件上传到Firebase。我建议您仅将URL存储在实时数据库中。现在,将其与电子邮件/密码用户(在创建帐户时不会自动拥有个人资料图片)同步,并允许用户更新其个人资料图片:
让用户设置自己的个人资料图片(通过将图片上传到Firebase Storage)。上传完成后,获取(存储参考的)下载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);
}
});