Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象不存在于android firebase上载文件的位置_Java_Android_Firebase_Firebase Storage - Fatal编程技术网

Java 对象不存在于android firebase上载文件的位置

Java 对象不存在于android firebase上载文件的位置,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我正在尝试使用firebase存储服务创建应用程序。我有一个从设备本地存储器保存图像的函数,使用图片的URI将其保存到firebase。当尝试将图像上载到firebase服务器时,我得到“对象在位置不存在”,这意味着我的URI存在问题 我正在添加整个活动,以便您可以看到正在发生的事情- public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static

我正在尝试使用firebase存储服务创建应用程序。我有一个从设备本地存储器保存图像的函数,使用图片的URI将其保存到firebase。当尝试将图像上载到firebase服务器时,我得到“对象在位置不存在”,这意味着我的URI存在问题

我正在添加整个活动,以便您可以看到正在发生的事情-


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    public static final int PICK_IMAGE_REQUEST = 1;
    public static final int DELAY_MILLIS = 5000;

    private Button buttonChooseImage, buttonUpload;
    private TextView textViewShowUpload;
    private EditText editTextFileName;
    private ImageView imageView;
    private ProgressBar progressBar;

    private Uri imageUri;
    private StorageReference storageReference;
    private DatabaseReference databaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonChooseImage = findViewById(R.id.button_choose_image);
        buttonUpload = findViewById(R.id.button_upload);
        textViewShowUpload = findViewById(R.id.text_view_show_uploads);
        editTextFileName = findViewById(R.id.edit_text_file_name);
        imageView = findViewById(R.id.image_view);
        progressBar = findViewById(R.id.progress_bar);

        buttonChooseImage.setOnClickListener(this);
        buttonUpload.setOnClickListener(this);
        textViewShowUpload.setOnClickListener(this);

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


    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button_choose_image:
                openFileChooser();
                break;
            case R.id.button_upload:
                uploadFile();
                break;
            case R.id.text_view_show_uploads:

                break;
        }
    }

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

    private void uploadFile() {
        if (imageUri != null) {
            StorageReference fileRefrence = storageReference.child(System.currentTimeMillis()
                    + "." + getFileExtension(imageUri));
            fileRefrence.putFile(imageUri).
                    addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    progressBar.setProgress(0);
                                }
                            }, DELAY_MILLIS);

                            Toast.makeText(MainActivity.this, "Upload Successful", Toast.LENGTH_LONG).show();
                            Upload upload = new Upload(editTextFileName.getText().toString().trim(),
                                    taskSnapshot.getMetadata().getReference().getDownloadUrl().toString());
                            String uploadId = databaseReference.push().getKey();
                            databaseReference.child(uploadId).setValue(upload);

                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            e.printStackTrace();
                            Toast.makeText(MainActivity.this, 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());
                            progressBar.setProgress((int) progress);
                        }
                    });
        } else {
            Toast.makeText(this, "No File Selected", 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);

        }
    }
}



公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
公共静态最终整数选取图像请求=1;
公共静态最终整数延迟=5000;
私有按钮ButtonButtonBooseImage、buttonUpload;
私有文本视图文本视图显示上载;
私有EditText editTextFileName;
私人影像视图;
私人ProgressBar ProgressBar;
私有Uri-imageUri;
私有存储参考存储参考;
私有数据库参考数据库参考;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonChooseImage=findviewbyd(R.id.button\u choose\u image);
buttonUpload=findViewById(R.id.button\u上传);
textViewShowUpload=findViewById(R.id.text\u view\u show\u uploads);
editTextFileName=findViewById(R.id.edit\u text\u file\u name);
imageView=findViewById(R.id.image\u视图);
progressBar=findViewById(R.id.progressBar);
ButtonCooseImage.setOnClickListener(此);
buttonUpload.setOnClickListener(这个);
textViewShowUpload.setOnClickListener(此);
storageReference=FirebaseStorage.getInstance().getReference(“上载”);
databaseReference=FirebaseDatabase.getInstance().getReference(“上载”);
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.按钮\u选择\u图像:
openFileChooser();
打破
案例R.id.按钮\上传:
上传文件();
打破
案例R.id.text\u视图\u显示\u上载:
打破
}
}
私有字符串getFileExtension(Uri){
ContentResolver cr=getContentResolver();
MimeTypeMap-mine=MimeTypeMap.getSingleton();
返回mine.getExtensionFromMimeType(cr.getType(uri));
}
私有void上传文件(){
if(imageUri!=null){
StorageReference filereference=StorageReference.child(System.currentTimeMillis()
+“+getFileExtension(imageUri));
filereference.putFile(imageUri)。
addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Handler=newhandler();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
progressBar.setProgress(0);
}
},延迟(单位为毫秒);
Toast.makeText(MainActivity.this,“上载成功”,Toast.LENGTH_LONG.show();
Upload Upload=新上载(editTextFileName.getText().toString().trim(),
taskSnapshot.getMetadata().getReference().getDownloadUrl().toString());
String uploadId=databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(upload);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
e、 printStackTrace();
Toast.makeText(MainActivity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(UploadTask.TaskSnapshot TaskSnapshot){
双进度=(100.0*taskSnapshot.GetByTestTransferred()/taskSnapshot.getTotalByteCount());
progressBar.setProgress((int)progress);
}
});
}否则{
Toast.makeText(这是“未选择文件”,Toast.LENGTH_SHORT).show();
}
}
私有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(请求代码、结果代码、数据);
如果(requestCode==PICK\u IMAGE\u REQUEST&&resultCode==RESULT\u OK
&&数据!=null&&data.getData()!=null){
imageUri=data.getData();
Picasso.get().load(imageUri).into(imageView);
}
}
}
我是否实现了错误的URI

编辑-

从评论中尝试此解决方案,但仍然得到相同的错误-


private void uploadFile() {
        if (imageUri != null) {
            StorageReference fileReference = storageReference.child("images/" + imageUri.getLastPathSegment());
            UploadTask uploadTask = fileReference.putFile(imageUri);
            uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setProgress(0);
                        }
                    }, DELAY_MILLIS);

                    Toast.makeText(MainActivity.this, "Upload Successful", Toast.LENGTH_LONG).show();
                    Upload upload = new Upload(editTextFileName.getText().toString().trim(),
                            taskSnapshot.getMetadata().getReference().getDownloadUrl().toString());
                    String uploadId = databaseReference.push().getKey();
                    databaseReference.child(uploadId).setValue(upload);
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this, 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());
                    progressBar.setProgress((int) progress);
                }
            });



        } else {
            Toast.makeText(this, "No File Selected", Toast.LENGTH_SHORT).show();

        }
    }



私有void上传文件(){
if(imageUri!=null){
StorageReference fileReference=StorageReference.child(“images/”+imageUri.getLastPathSegment());
UploadTask UploadTask=fileReference.putFile(imageUri);
uploadTask.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Handler=newhandler();
handler.postDelayed(n
StorageReference imageReference = storageReference.child("uploads");  

              UploadTask uploadTask = imageReference.putFile(imageuri);
                    uploadTask.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(verify.this, "Upload failed!", Toast.LENGTH_SHORT).show();
                        }
                    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            if (taskSnapshot.getMetadata() != null) {
                                if (taskSnapshot.getMetadata().getReference() != null) {

                                    Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();
                                    result.addOnSuccessListener(new OnSuccessListener<Uri>() {
                                        @Override
                                        public void onSuccess(Uri uri) {
            StorageReference fileRefrence = storageReference.child(System.currentTimeMillis()
                    + "." + getFileExtension(imageUri));
            StorageReference fileRefrence = storageReference.child(imageUri.getLastPathSegment());
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()) {
            throw new Exception("task is not succeeded");
        } return refStorage.getDownloadUrl();
    }//end of throws Exception method
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()) {
            downUri = task.getResult();
        } else {
            // Handle failures
            // ...
            Log.d("<<<<<<<<", "<<<<<<<<<<<<<<<<<<<< not uplooaded ");
        }
    }//end of onComplete()for getting download uri
}); 
private void uploadFile(){
    if(mImageUri!=null){
            storageReference.putFile(mImageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>()
            {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception
                {
                    if (!task.isSuccessful())
                    {
                        throw task.getException();
                    }
                    return storageReference.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>()
            {
                @Override
                public void onComplete(@NonNull Task<Uri> task)
                {
                    if (task.isSuccessful())
                    {
                        Uri downloadUri = task.getResult();
                        Log.e("TAG", "then: " + downloadUri.toString());


                        Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
                                downloadUri.toString());
                        databaseReference.push().setValue(upload);
                        Toast.makeText(MainActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
                    } else
                    {
                        Toast.makeText(MainActivity.this, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
    }
    else{
        Toast.makeText(this, "Please upload image!", Toast.LENGTH_SHORT).show();
    }
}