如何上载和接收用户个人资料图片?

时间:2018-08-17 17:20:10

标签: firebase firebase-realtime-database firebase-storage user-profile

到目前为止,在我的社交媒体应用程序中,用户的数据(例如名字,姓氏,电子邮件,性别等)可以保存在firebase数据库中,并在需要时进行检索。截止到今天,我第一次创建个人资料时就得到了一张有效的个人资料图片,您可以点击空白的个人资料图片图标,它会加载您的图库,并用用户选择的任何图片替换它。

尽管这很整洁,但我需要能够以某种方式在我的Firebase数据库的“用户”节点下上传此图像。当涉及到转换位图数据时,我感到很迷茫,在阅读了一些文档之后,仍然让我感到困惑。下面是我的代码,该代码使用本地保存的照片替换为个人资料照片,以显示到目前为止的信息。

@Override
public void onClick(View view)
{
    if (view == profilePicture)
    {
        //Toast.makeText(this, "We made it to the onClick for image!", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, 0);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK)
    {
        Uri targetUri = data.getData();
        Bitmap bitmap;
        try
        {
            bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
            profilePicture.setImageBitmap(bitmap);
        }

        catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

onClick方法在用户点击配置文件图标后运行。现在,我将向您展示我当前正在使用的数据库,这是Firebase实时数据库,而不是Firebase存储。虽然Firebase存储可能更合适,但我似乎无法弄清楚如何分辨谁的照片是谁,因为它没有使用关联的用户ID上传照片。

Database Picture Here

1 个答案:

答案 0 :(得分:0)

与数据库类似,对于像您这样的简单问题,更好的解决方案将是Firebase Storage,而不是上载bitMap,但是您可以轻松地上载图像等文件。

以下是我当前在我的应用中使用的方法:

private void chooseImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}

private void uploadImage() {

    if(filePath != null)
    {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        StorageReference ref = storageReference.child("images/"+userID);
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.dismiss();
                        toastMessage("Uploaded");
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        toastMessage("Failed"+e.getMessage());
                    }
                })
                .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+"%");
                    }
                });
    }
}