Android 为什么图像上载在firebase存储中失败?

Android 为什么图像上载在firebase存储中失败?,android,firebase-realtime-database,firebase-storage,Android,Firebase Realtime Database,Firebase Storage,单击“选择图像”按钮可以选择图像,图像将显示在imageview中 并将在单击“保存图像”后上载到firebase存储。如果成功,则有关该图像的数据将上载到实时firebase数据库。但单击“保存图像”按钮后不会发生任何事情。有什么问题吗 以下是我的代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button chooseButton,sa

单击“选择图像”按钮可以选择图像,图像将显示在imageview中 并将在单击“保存图像”后上载到firebase存储。如果成功,则有关该图像的数据将上载到实时firebase数据库。但单击“保存图像”按钮后不会发生任何事情。有什么问题吗

以下是我的代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button chooseButton,saveButton,displayButton;
    private EditText imagenameEdittext;
    private ImageView imageView;
    private ProgressBar progressBar;
    private Uri imageUri;
    private StorageReference storageReference;
    private DatabaseReference  databaseReference;
    private StorageTask uploadTask;

    private static final int IMAGE_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        databaseReference = FirebaseDatabase.getInstance().getReference("Upload");
        storageReference = FirebaseStorage.getInstance().getReference("Upload");

        chooseButton = findViewById(R.id.chooseImageButtonid);
        saveButton = findViewById(R.id.saveImageButtonid);
        displayButton = findViewById(R.id.displayImageButtonid);
        progressBar = findViewById(R.id.progressbarid);

        imageView = findViewById(R.id.imageviewid);
        imagenameEdittext = findViewById(R.id.imagenameEdittextid);

        chooseButton.setOnClickListener(this);
        saveButton.setOnClickListener(this);
        displayButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

        switch(view.getId()){

            case R.id.chooseImageButtonid:
                openFileChooser();
                break;
            case R.id.saveImageButtonid:
                if(uploadTask!=null && uploadTask.isInProgress()){
                    Toast.makeText(this, "Uploading in progress", Toast.LENGTH_SHORT).show();
                }
                else{
                    saveData();
                }
                saveData();
                break;
            case R.id.displayImageButtonid:

                break;
        }
    }
    public void openFileChooser(){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==IMAGE_REQUEST && resultCode==RESULT_OK && data!=null && data.getData()!=null){
            imageUri = data.getData();
            Picasso.get().load(imageUri).into(imageView);
        }
    }

    public String getFileExtension(Uri imageUri){
        ContentResolver contentResolver = getContentResolver();
        MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(imageUri));
    }

    private void saveData(){
        final String imageName = imagenameEdittext.getText().toString().trim();
        if(imageName.isEmpty()){
            imagenameEdittext.setError("Enter the image name");
            imagenameEdittext.requestFocus();
            return;
        }
        StorageReference ref = storageReference.child(System.currentTimeMillis()+"."+getFileExtension(imageUri));
        ref.putFile(imageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // Get a URL to the uploaded content
                        Toast.makeText(MainActivity.this, "Image is stored Successfully", Toast.LENGTH_SHORT).show();

                        Upload upload = new Upload(imageName,taskSnapshot.getStorage().getDownloadUrl().toString());
                        String uploadId = databaseReference.push().getKey();
                        databaseReference.child(uploadId).setValue(upload);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle unsuccessful uploads
                        Toast.makeText(MainActivity.this, "Image store failed", Toast.LENGTH_SHORT).show();
                    }
                });
    }
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私有按钮选择按钮、保存按钮、显示按钮;
私有EditText imagenameEdittext;
私人影像视图;
私人ProgressBar ProgressBar;
私有Uri-imageUri;
私有存储参考存储参考;
私有数据库参考数据库参考;
私有存储任务上传任务;
私有静态最终int图像_请求=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseReference=FirebaseDatabase.getInstance().getReference(“上载”);
storageReference=FirebaseStorage.getInstance().getReference(“上载”);
chooseButton=findviewbyd(R.id.chooseImageButtonid);
saveButton=findViewById(R.id.saveImageButtonid);
displayButton=findViewById(R.id.displayImageButtonid);
progressBar=findViewById(R.id.progressbarid);
imageView=findViewById(R.id.imageviewid);
imagenameEdittext=findViewById(R.id.imagenameEdittextid);
选择Button.setOnClickListener(此);
saveButton.setOnClickListener(这个);
displayButton.setOnClickListener(此);
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.选择图像按钮NID:
openFileChooser();
打破
案例R.id.saveImageButtonid:
if(uploadTask!=null&&uploadTask.isInProgress()){
Toast.makeText(这是“正在上载”,Toast.LENGTH_SHORT).show();
}
否则{
saveData();
}
saveData();
打破
案例R.id.displayImageButtonid:
打破
}
}
public void openFileChooser(){
意图=新意图();
intent.setType(“image/*”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(意图、图像请求);
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==IMAGE\u REQUEST&&resultCode==RESULT\u OK&&data!=null&&data.getData()!=null){
imageUri=data.getData();
Picasso.get().load(imageUri).into(imageView);
}
}
公共字符串getFileExtension(Uri imageUri){
ContentResolver ContentResolver=getContentResolver();
MimeTypeMap MimeTypeMap=MimeTypeMap.getSingleton();
返回mimeTypeMap.getextensionfrommetype(contentResolver.getType(imageUri));
}
私有void saveData(){
最终字符串imageName=imagenameEdittext.getText().toString().trim();
if(imageName.isEmpty()){
设置错误(“输入图像名称”);
imagenameEdittext.requestFocus();
返回;
}
StorageReference ref=StorageReference.child(System.currentTimeMillis()+“+”+getFileExtension(imageUri));
ref.putFile(imageUri)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//获取上传内容的URL
Toast.makeText(MainActivity.this,“图像已成功存储”,Toast.LENGTH_SHORT.show();
Upload Upload=新上载(imageName,taskSnapshot.getStorage().getDownloadUrl().toString());
String uploadId=databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(upload);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理不成功的上传
Toast.makeText(MainActivity.this,“图像存储失败”,Toast.LENGTH_SHORT.show();
}
});
}
}

请告诉我imageuri是否为空?
尝试在日志中打印imageuri以检查它是否为空。

可能是运行时权限问题。从API 23开始,您需要运行时权限才能访问gallert以拾取图像。您无法像这样获取下载url=>taskSnapshot.getStorage().getDownloadUrl().toString()这不起作用:
taskSnapshot.getStorage().getDownloadUrl().toString()
获取下载url的正确方法,请参阅或尝试使用
VPN
上载。您可以使用热点Sheild VPN。如果上传与VPN配合使用,那么您必须了解您所在国家的互联网服务存在问题。因为,在孟加拉国,firebase storage的本机sdk从2020年5月29日起停止工作。这是孟加拉国BTCL的一个问题。我们与它毫无关系。所以,尝试一下热点Sheild VPN.mubin986我在这方面使用了SuperVPN。但是仍然没有发生任何事情我检查了imageuri,它不是空的