如何在Firebase实时数据库中保存图像URL?

时间:2019-10-09 07:59:23

标签: java android firebase firebase-realtime-database image-uploading

我想将图像url保存在实时数据库中,但是我尝试过的所有解决方案都不能解决问题,我编写的代码将图像保存在firebase存储中,但我想将图像url实时保存-时间数据库,那么有人可以帮忙吗?

此代码只是将图像保存在Firebase存储中

private Button btn_upload,btn_choose;
private ImageView imageView;
private Uri filepath;
private FirebaseStorage storage;
private StorageReference storageReference;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn_choose= (Button) findViewById(R.id.btn_choose);
    btn_upload= (Button) findViewById(R.id.btn_upload);
    imageView= (ImageView) findViewById(R.id.myImage);

    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();

    btn_upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            uploadImage();

        }
    });

    btn_choose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            chooseImage();

        }
    });



}

// choose image function code

private void uploadImage() {

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

        StorageReference reference = storageReference.child("images/" + UUID.randomUUID().toString());

        reference.putFile(filepath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                progressDialog.dismiss();

                Toast.makeText(MainActivity.this, "Image uploaded", Toast.LENGTH_SHORT) .show();
            }
        })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

                        double progres = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                        progressDialog.setMessage("Uploaded"+(int)progres+"%");
                    }
                }) ;


    }   }

我想将图像存储在实时数据库中

2 个答案:

答案 0 :(得分:1)

上传完成后,您可以请求文件的下载URL。 然后将URL添加到实时数据库

  reference.putFile(filepath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                progressDialog.dismiss();

                Toast.makeText(MainActivity.this, "Image uploaded", Toast.LENGTH_SHORT) .show();
                reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                      //You will get donwload URL in uri
                      Log.d(TAG, "Download URL = "+ uri.toString());
                      //Adding that URL to Realtime database
                      mDatabase.child("imageUrl").setValue(uri.toString());
                    }
                });
            }
        })

答案 1 :(得分:0)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null )
    {
        filePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            imageView.setImageBitmap(bitmap);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

private void uploadImage(){ 名称= txtname.getText()。toString();

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

        StorageReference ref = storageReference.child("images/"+ name);
        ref.putFile(filePath)
                .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+"%");
                    }
                });
    }

            Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
}