首页 > 解决方案 > 无法在 firebase 上上传多张图片的 addOnSuccessListener。即进入addOnFailureListener

问题描述

我想在 firebase storege 上上传多张图片。但我无法上传它。下面是我的代码。


AddNewProjectActivity.java "保存项目方法"

private void saveProject() {

        String pro_name, client_name, pro_rec_date, pro_comp_date, total_views, pro_no, arch_no;

        pro_no = binding.projectNo.getText().toString();
        arch_no = binding.architectNumber.getText().toString();
        pro_name = binding.projectName.getText().toString();
        client_name = binding.ClientName.getText().toString();
        pro_comp_date = binding.projectCompleteDate.getText().toString();
        pro_rec_date = binding.projectReceivedDate.getText().toString();
        total_views = binding.totalViewsOfPhotos.getText().toString();

        progressDialog.setMessage("Writing in Database...");
        progressDialog.setCancelable(false);
        progressDialog.setIcon(R.mipmap.ic_launcher_round);
        progressDialog.setTitle("Aurum Design");
        progressDialog.show();

        if (!(item.equals("Payment Received or Not?") && item2.equals("Project Status"))) {

            reference = FirebaseDatabase.getInstance().getReference("project_details");
            StorageReference ImageFolder = FirebaseStorage.getInstance().getReference().child("ProjectImages");
            final HashMap<String, Object> hashMap = new HashMap<>();

            //upload data
            hashMap.put("architect_no", arch_no);
            hashMap.put("client_name", client_name);
            hashMap.put("payment_received", item);
            hashMap.put("project_status", item2);
            hashMap.put("project_complete_date", pro_comp_date);
            hashMap.put("project_name", pro_name);
            hashMap.put("project_no", pro_no);
            hashMap.put("project_received_date", pro_rec_date);
            hashMap.put("total_views_of_photos", total_views);

            //upload Images
            for (upload_count = 0; upload_count < uri.size(); upload_count++) {
                Uri IndividualImage = uri.get(upload_count);
                final StorageReference ImageName = ImageFolder.child("Image" + pro_name + IndividualImage.getLastPathSegment());

                ImageName.putFile(IndividualImage).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        ImageName.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                String URL = String.valueOf(uri);
                                hashMap.put("image_url"+upload_count,URL);
                            }
                        });
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(activity, "failed", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            reference.push().setValue(hashMap);
            uri.clear();
            progressDialog.dismiss();
            startActivity(new Intent(activity, MainActivity.class));
            activity.finish();

        } else {
            progressDialog.dismiss();
            Toast.makeText(activity, "select payment received or not?", Toast.LENGTH_SHORT).show();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(activity, "select Project Status", Toast.LENGTH_SHORT).show();
                }
            }, 1000);
        }
    }

在上面的代码中 addOnSuccessListener 不起作用


进入 addOnFailureListener

ImageName.putFile(IndividualImage).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        ImageName.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                String URL = String.valueOf(uri);
                                hashMap.put("image_url"+upload_count,URL);
                            }
                        });
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(activity, "failed", Toast.LENGTH_SHORT).show();
                    }
                });

请任何人知道解决方案,请告诉我。提前致谢...

标签: javaandroidfirebasefirebase-realtime-databasefirebase-storage

解决方案


我解决了错误。我忘记将存储规则更新为公开。


上面的代码是无错误代码......因此,您可以使用此代码在 Firebase 存储上上传多个图像。但是,不要忘记检查 firebase 规则,我在下面添加规则。


firebase 存储规则

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

推荐阅读