我想在我的数据库中保存用户的个人资料图片,以后再使用。
我使用以下代码将其保存到我的firebase云存储中:
private void uploadImage() {
if(picture != null)
{
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
StorageReference ref = storageReference.child("images"+ UUID.randomUUID().toString());
ref.putFile(picture)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Uploaded "+(int)progress+"%");
}
});
}
}
现在,我希望将其保存为数据库中的孩子... 我有这个代码来保存所有数据(姓名,电子邮件,电话,密码......)
mAuth.createUserWithEmailAndPassword(edtEmail.getText().toString(), edtPassword.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
User user = new User();
user.setEmail(edtEmail.getText().toString());
user.setPhone(edtPhone.getText().toString());
user.setPassword(edtPassword.getText().toString());
user.setName(edtName.getText().toString());
user.setId(mAuth.getCurrentUser().getUid());
user.setProfilePic(picture);
但&#34; user.setProfilePic(图片)&#34;没有工作......
在我的数据库中保存用户个人资料照片的最佳方法是什么?
谢谢
答案 0 :(得分:1)
这不是正确的做法。你应该做的是,
1)使用一些UUID将图像存储在自己的存储中。
2)将图像引用存储在存储中。
3)从database
获取数据,使用Glide或Picasso等库来加载图像以避免OutOfMemory
例外。
以下是示例
StorageReference ref = storageReference.child("images"+ UUID.randomUUID().toString());
ref.putFile(picture)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Uri downloadUri = taskSnapshot.getMetadata().getDownloadUrl();
String downloadurl = mDownloadUrl.toString();
}
})
);
现在
User user = new User();
user.setEmail(edtEmail.getText().toString());
user.setPhone(edtPhone.getText().toString());
user.setPassword(edtPassword.getText().toString());
user.setName(edtName.getText().toString());
user.setId(mAuth.getCurrentUser().getUid());
user.setProfilePic(downloadurl); //here picture URL
最后一步只是将数据推送到DataBase
String key = mDatabase.child("YourNodeHere").push().getKey();
mDatabase.child("YourNodeHere").child(key).setValue(user);
答案 1 :(得分:0)
要将个人资料图片保存在数据库中,请尝试以下操作:
ref=db.child(mCurrentUser.getUid());
StorageReference filepath=mStorage.child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
String downloadurl = taskSnapshot.getDownloadUrl().toString();
ref.child("image").setValue(downloadurl);
//can save other data also
}
});
首先在firebase存储中添加图片的网址,然后如果成功添加,您将能够检索网址String downloadurl = taskSnapshot.getDownloadUrl().toString();
并将其添加到数据库child("image").setValue(downloadurl);
更多信息:
https://firebase.google.com/docs/storage/android/download-files