繁体   English   中英

无法从data.getData()获取Uri

[英]Can't get Uri from data.getData()

我正在尝试捕获图像并将其上传到Firebase 问题是我从onActivityResult中的data.getData()获取空值。

我看了看网络,在这种情况下找不到适合我的东西。

public void onClick(View v) {
   Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
   startActivityForResult(intent,  CAMERA_REQUEST_CODE);
}

这是onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri uri = data.getData();
StorageReference filePath = storageRef.child("labelPhoto").child(uri.getLastPathSegment())
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
....rest of the code... }

我无法发送到uri,因为data.geData()空;

我尝试了多种解决方案,例如将图像保存为bmp并获取此uri:

Bitmap bitmap= (Bitmap)data.getExtras().get("data");
            captureImage.setImageBitmap(bitmap);
String mPath = Environment.getExternalStorageDirectory().toString() + "/Pictures/" + picName + ".jpg";
            File imageFile = new File(mPath);
            FileOutputStream outputStream = null;


            try {
                outputStream = new FileOutputStream(imageFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
                outputStream.flush();
                outputStream.close();
                String temp = Environment.getExternalStorageDirectory().getPath() + "/Pictures/";
                uri=  Uri.fromFile(imageFile);
                Log.d("TAG", uri.toString());
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
                java.net.URI javaUri = java.net.URI.create(uri.toString());
                android.net.Uri androidUri = android.net.Uri.parse(uri.toString());
                StorageReference filePath = storageRef.child("labelPhoto").child(androidUri.toString());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
....rest of the code...}

添加如下检查:

  if(resultCode != RESULT_CANCELED){

if(data!=null)

清单:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />

没有任何成功。 有人有主意吗?

如果您使用的是标准的Android相机应用程序,则应将想要存储照片的URI传递为这样的意图:

Uri outputFileUri = Uri.fromFile(YOUR_FILE);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent(MediaStore.EXTRA_OUTPUT, outputFileUri);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM