每次我尝试拍照并上传到firebase时,应用程序都会崩溃。

时间:2018-03-17 23:18:10

标签: java android nullpointerexception

所以我目前正在编写Android应用程序。作为其功能的一部分,我需要它使用相机拍照,然后将其上传到已经设置的firebase存储。这是我的Android代码:

package com.example.android.imagetotext;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

public class UploadImage extends AppCompatActivity {

    private Button mUploadBtn;
    private ImageView mImageView;
    private Button button;
    private static final int CAMERA_REQUEST_CODE = 1;
    private StorageReference mStorage;
    private ProgressDialog mProgress;

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

        mUploadBtn = (Button) findViewById(R.id.upload);
        mImageView = (ImageView) findViewById(R.id.imageView);
        mStorage = FirebaseStorage.getInstance().getReference();
        mProgress = new ProgressDialog(this);
        mUploadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, CAMERA_REQUEST_CODE);
            }
        });
    }

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

        if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK){

            mProgress.setMessage("Uploading image..");
            mProgress.show();


            Uri uri = data.getData();

            StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment());

            filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    mProgress.dismiss();
                    Toast.makeText(UploadImage.this, "Uploading finished...", Toast.LENGTH_SHORT).show();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });
        }
    }
}

为了清楚起见,我已经删除了很多Import语句,但项目构建和编译很好。该应用程序本身加载应用程序,加载此页面,转到相机并拍摄照片。只有当我确认应用程序崩溃的图片时才会这样。这是错误消息:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getLastPathSegment()' on a null object reference at com.example.android.imagetotext.UploadImage.onActivityResult(UploadImage.java:62)

这是这行代码:

StorageReference filepath = Storage.child("Photos").child(uri.getLastPathSegment());

我无法看到它的错误,有人可以帮助我吗?

0 个答案:

没有答案