所以我目前正在编写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());
我无法看到它的错误,有人可以帮助我吗?