java - 为什么甚至在点击上传按钮 Android Firebase Storage 之前图像就会自动上传?

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

您好,我正在使用 Android Firebase Storage 上传照片,然后使用 Glide 将它们显示到我的 ImageView 中。虽然它们确实有效,但我有一个问题,即在我的谷歌驱动器上选择图片后,图片会自动上传,而不是等待我在图片上传到服务器之前点击上传按钮。

我的代码

 imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            chooseImage();
        }
    });
    btnUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            uploadImage();
        }
    });
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String firstname = dataSnapshot.child("first").getValue(String.class);
            String secondname = dataSnapshot.child("second").getValue(String.class);
            String number = dataSnapshot.child("number").getValue(String.class);
            String gender = dataSnapshot.child("gender").getValue(String.class);
            String email = dataSnapshot.child("email").getValue(String.class);
            String date = dataSnapshot.child("date").getValue(String.class);
            String url = dataSnapshot.child("image").getValue(String.class);
            userfirstName.setText(firstname);
            usersecondName.setText(secondname);
            userNumber.setText(number);
            userGender.setText(gender);
            userEmail.setText(email);
            userDate.setText(date);

            Glide.with(userMain.this)
                    .load(url)
                    .into(imageView);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return view;
}

private void uploadImage() {
    if(filePath != null)
    {
        final ProgressDialog progressDialog = new ProgressDialog(getActivity());
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.dismiss();
                        Toast.makeText(getContext(), "Uploaded", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        Toast.makeText(getContext(), "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+"%");
                    }
                });
    }
}

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);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();
    String useruid=user.getUid();
    final DatabaseReference img = FirebaseDatabase.getInstance().getReference().child("Accounts").child("Users").child(useruid);
    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null )
    {
        filePath = data.getData();
        StorageReference filepath= storageReference.child("Images").child(filePath.getLastPathSegment());
        filepath.putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                String downloadUrl = taskSnapshot.getDownloadUrl().toString();
                img.child("image").setValue(downloadUrl);
                imageView.setImageURI(filePath);

            }
        });

最佳答案

当您从当前 Activity (MainActivity) 启动一个 Activity 时,要获取它的结果,将调用 startActivityForResult() 方法。当您被重定向以打开一个 Activity ,如:相机、图库、Google 云端硬盘等,拍摄您感兴趣的图像后,返回当前 Activity 时,第一个自动调用的方法是 onActivityResult().

正如我在您的代码中看到的,您也在 onActivityResult() 中添加了图片,这就是为什么您的图片会自动上传的原因。如果你希望它是这样的,那么只需让 onActivityResult() 中的代码并将其从 uploadImage() 方法中删除,否则执行相反的操作。

关于java - 为什么甚至在点击上传按钮 Android Firebase Storage 之前图像就会自动上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49045052/

相关文章:

java - 在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是否为大写

android - 在Webview中长按-应用崩溃

android - 应用程序崩溃时的良好做法

与谷歌的 firebase token 生成器一起使用的 Android 唯一设备标识符

android - 撰写预览根本不起作用 - 需要编译项目

javascript - 每个用户的 Firebase 文档?

java - 从 META-INF 中过滤掉服务提供商文件

java - 在真实设备上运行应用程序时出现 NoClassDefFoundError,但在模拟器上运行时不会出现 NoClassDefFoundError

android 上的 java.lang.outofmemory 错误(Web 服务)

java - 运行 runnable 后应用卡住