【问题标题】:Upload Images to Firebase Storage and store a link in Firebase Database [duplicate]将图像上传到 Firebase 存储并将链接存储在 Firebase 数据库中 [重复]
【发布时间】:2020-08-09 16:04:24
【问题描述】:

我正在将图像上传到 firebase,我想将其 url 存储到数据库中

我的图片上传到 Firebase 存储中,名称存储在 Firebase 数据库中

但在 ImageUrl "com.google.android.gms.tasks.zzu@5ef6ed8" 中会存储这种 url

我应该做些什么来存储正确的网址

请提供完整代码

这是我的 Upload_photos.java

package com.namandevloper.satyampublic;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;

public class Upload_Photos extends AppCompatActivity {
    private static final int PICK_IMAGE_REQUEST = 1;
    private ImageView imageView;
    private EditText name;
    private Button uploadbutton;
    private Uri imageuri;
    private StorageReference mStorageref;
    private DatabaseReference mDatabaseref;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload__photos);
        imageView = findViewById(R.id.image);
        name = findViewById(R.id.name);
        uploadbutton = findViewById(R.id.btn_upload);
        mStorageref = FirebaseStorage.getInstance().getReference("Upload Photos");
        mDatabaseref = FirebaseDatabase.getInstance().getReference("Upload Photos");



        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openfilechooser();


            }
        });

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

                uploadfile();

            }
        });
    }
    private String getFileExtension(Uri uri){
        ContentResolver cr = getContentResolver();
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        return mime.getExtensionFromMimeType(cr.getType(uri));

    }

    private void uploadfile() {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading");
        progressDialog.show();


        if (imageuri !=null){
            StorageReference  filereference  = mStorageref.child(System.currentTimeMillis()+
                    "."+getFileExtension(imageuri));

            filereference.putFile(imageuri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                            Toast.makeText(Upload_Photos.this, "Upload Successfully", Toast.LENGTH_SHORT).show();
                            Upload upload = new Upload(name.getText().toString().trim(),taskSnapshot.getMetadata().getReference().getDownloadUrl()
                            .toString());
                            progressDialog.show();




                            String  uploadId = mDatabaseref.push().getKey();
                            mDatabaseref.child(uploadId).setValue(upload);
                            progressDialog.setCanceledOnTouchOutside(false);
                            progressDialog.dismiss();




                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {

                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0*taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount();
                            progressDialog.setCanceledOnTouchOutside(false);
                            progressDialog.setMessage("Uploaded  " +(int)progress+"%");



                        }
                    });

        }else
            Toast.makeText(this, "Please Select a Image", Toast.LENGTH_SHORT).show();





    }

    private void openfilechooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,PICK_IMAGE_REQUEST);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data !=null &&
        data.getData()!=null){
            imageuri = data.getData();
           Picasso .get().load(imageuri).into(imageView);

        }
    }
}

这是我的upload.java

package com.namandevloper.satyampublic;

      public class Upload {
        private String mName;
        private String mImageUrl;

        public Upload() {
            //empty constructor needed
        }

          public Upload(String name, String imageUrl) {
              if (name.trim().equals("")) {
                  name = "No Name";
              }

              mName = name;
              mImageUrl = imageUrl;
          }

          public String getName() {
              return mName;
          }

          public void setName(String name) {
              mName = name;
          }

          public String getImageUrl() {
              return mImageUrl;
          }

          public void setImageUrl(String imageUrl) {
              mImageUrl = imageUrl;
          }
      }

这是我的活动上传__照片

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:padding="16dp"
    android:layout_height="match_parent"
    tools:context=".Upload_Photos">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Image to Upload"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:textSize="22dp"
        android:textStyle="bold"
        />

    <ImageView
        android:id="@+id/image"
        android:layout_width="380dp"
        android:layout_height="249dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:src="@drawable/click" />


    <EditText
        android:id="@+id/name"
        android:layout_width="354dp"
        android:layout_height="66dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="400dp"

        android:hint="Image Name" />


    <Button
        android:id="@+id/btn_upload"
        android:layout_width="249dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="500dp"
        android:background="@android:color/holo_red_dark"
        android:text="Upload"
        android:textColor="@android:color/white"
        android:textStyle="bold" />
</RelativeLayout>

这就是我的数据库的样子

Firebase Database

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    您必须调用侦听器才能从 firebase 存储中获取下载 uri。使用以下代码来做到这一点。阅读docs

    filereference.putFile(imageuri)
        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Toast.makeText(Upload_Photos.this, "Upload Successfully", Toast.LENGTH_SHORT).show();
                filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            Uri downloadUrl = uri;
                            Upload upload = new Upload(name.getText().toString().trim(),downloadUrl.toString());
                            progressDialog.show();
                            String  uploadId = mDatabaseref.push().getKey();
                            mDatabaseref.child(uploadId).setValue(upload);
                            progressDialog.setCanceledOnTouchOutside(false);
                            progressDialog.dismiss();
                        }
                });
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
    
            }
        })
        .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0*taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount();
                progressDialog.setCanceledOnTouchOutside(false);
                progressDialog.setMessage("Uploaded  " +(int)progress+"%");
    
    
    
            }
        });
    

    【讨论】:

    • 当我使用文件路径时,它显示无法解析符号,当我使用文件引用时,它在底部显示 2-3 个错误。我该怎么办?您能否在更正后将整个代码发给我,或者我可以亲自与您交谈吗?
    • @user9157668 请使用更新后的代码
    • 是的,我使用了它,但它下面的所有内容都给了我错误。请输入完整的代码。
    • 请解释您遇到了什么错误
    • .addOnProgressListener(new OnProgressListener() { 给出错误无法解决方法。请你能在其他平台上与我交谈吗?
    猜你喜欢
    • 2018-08-23
    • 2021-07-12
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2017-09-25
    相关资源
    最近更新 更多