从云存储到数据库的个人资料图片 - Android

时间:2018-04-16 08:40:55

标签: android firebase firebase-realtime-database

我想在我的数据库中保存用户的个人资料图片,以后再使用。

我使用以下代码将其保存到我的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;没有工作......

在我的数据库中保存用户个人资料照片的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:1)

这不是正确的做法。你应该做的是,

1)使用一些UUID将图像存储在自己的存储中。

2)将图像引用存储在存储中。

3)database获取数据,使用GlidePicasso等库来加载图像以避免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