【问题标题】:How to upload an image file to firebase firestore?如何将图像文件上传到 Firebase Firestore?
【发布时间】:2020-04-11 01:37:54
【问题描述】:

这是我的 UploadActivity。该应用程序允许我选择一个文件,但一按下上传按钮就会崩溃。每次都会显示 OnFailedListener 的 Toast 消息。 我正在选择具有正确命名约定的正确图像文件,但仍然面临同样的问题。 我参考了文档和教程,并实现了几乎相同的方法。 我究竟做错了什么?

public class UploadActivity extends AppCompatActivity {
   Button selectfile,upload;
   TextView notify;
   Uri imguri;
   ProgressDialog progressDialog;
   FirebaseStorage storage;
   FirebaseDatabase database;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_upload);
       storage = FirebaseStorage.getInstance();
       database = FirebaseDatabase.getInstance();

       selectfile = findViewById(R.id.SelectFile);
       upload = findViewById(R.id.UploadFile);
       notify = findViewById(R.id.notify);

       selectfile.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if(ContextCompat.checkSelfPermission(UploadActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED){
                   selectPDF();
               }
               else{
                   ActivityCompat.requestPermissions(UploadActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},9);
               }

           }
       });

       upload.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if(imguri!=null){
                   uploadFile(imguri);
               }
               else{
                   Toast.makeText(UploadActivity.this, "Please Select a File", Toast.LENGTH_SHORT).show();
               }
           }
       });

   }

   private void uploadFile(Uri imguri) {
       final String filename = System.currentTimeMillis()+"";
       progressDialog = new ProgressDialog(this);
       progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       progressDialog.setTitle("Uploading File... ");
       progressDialog.setProgress(0);
       progressDialog.show();
       StorageReference storageReference = storage.getReference();
       storageReference.child("Uploads").child(filename).putFile(imguri)
               .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                   @Override
                   public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                       Task<Uri> task = taskSnapshot.getMetadata().getReference().getDownloadUrl();

                       task.addOnSuccessListener(new OnSuccessListener<Uri>() {
                           @Override
                           public void onSuccess(Uri uri) {
                               String url = uri.toString();
                               DatabaseReference databaseReference = database.getReference();
                               databaseReference.child(filename).setValue(url).addOnCompleteListener(new OnCompleteListener<Void>() {
                                   @Override
                                   public void onComplete(@NonNull Task<Void> task) {
                                       if(task.isSuccessful()){
                                           Toast.makeText(UploadActivity.this, "Successfully Uploaded", Toast.LENGTH_SHORT).show();
                                       }
                                       else{
                                           Toast.makeText(UploadActivity.this, "Please Try Again", Toast.LENGTH_SHORT).show();
                                       }
                                   }
                               });
                           }
                       });
                   }
               }).addOnFailureListener(new OnFailureListener() {
           @Override
           public void onFailure(@NonNull Exception e) {
               Toast.makeText(UploadActivity.this, "File was not uploaded, please try again!", Toast.LENGTH_SHORT).show();
           }
       }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
           @Override
           public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
               int currentProgress = (int) (100*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
               progressDialog.setProgress(currentProgress);
           }
       });

   }

   @Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       if(requestCode==9 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
           selectPDF();
       }
       else{
           Toast.makeText(this, "Please Provide External Storage Permission", Toast.LENGTH_LONG).show();
       }
   }

   private void selectPDF() {

       Intent intent = new Intent();
       intent.setType("images/*");
       intent.setAction(Intent.ACTION_GET_CONTENT);
       startActivityForResult(intent,86);

   }

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

       super.onActivityResult(requestCode, resultCode, data);
       if (requestCode == 86 && resultCode == RESULT_OK && data != null) {
           imguri = data.getData();
           notify.setText("File Selected : "+ data.getData().getLastPathSegment());
       } else {
           Toast.makeText(this, "Please Select a file", Toast.LENGTH_SHORT).show();
       }
   }
}

【问题讨论】:

  • 您在onFailure() 中遇到的错误是什么?
  • 应用程序崩溃并提示“文件未上传,请重试!”显示,这意味着 onFailureListener 被执行。
  • 尝试记录异常信息。 Log.d("TAG", e.getException().getMessage()); 告诉我们打印出来的内容。
  • 所以我记录了两个错误:1.) 发生了 StorageException。发生未知错误,请检查服务器响应的 HTTP 结果代码和内部异常。 2.) android.view.WindowLeaked: Activity com.example.tradeapp.UploadActivity 已经泄露了最初添加在这里的窗口 DecorView@c108806[ ]。我相信,第一个错误导致了第二个,但不确定。
  • 感谢@AlexMamo。我将存储版本更改为最新版本,现在它可以正常工作了。

标签: android firebase google-cloud-firestore


【解决方案1】:

在 build.gradle(module:app) 中,使用 com.google.firebase:firebase-storage 的最新版本。再次感谢@AlexMamo。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2019-07-24
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多