Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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 如何将URI传递给intent?_Java_Android_Android Intent_Uri - Fatal编程技术网

Java 如何将URI传递给intent?

Java 如何将URI传递给intent?,java,android,android-intent,uri,Java,Android,Android Intent,Uri,我试图将URI对象传递给我的意图,以便使用该URI 在另一项活动中 如何传递URI private Uri imageUri; .... Intent intent = new Intent(this, GoogleActivity.class); intent.putExtra("imageUri", imageUri); startActivity(intent); this.finish(); 我现在如何在我的其他活动中使用此URI imageUri = extras.getStrin

我试图将URI对象传递给我的意图,以便使用该URI 在另一项活动中

如何传递URI

private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);
startActivity(intent);
this.finish();
我现在如何在我的其他活动中使用此URI

 imageUri = extras.getString("imageUri"); // I know thats wrong ...

谢谢大家

您可以将uri存储为字符串

intent.putExtra("imageUri", imageUri.toString());
然后像这样将字符串转换回uri

Uri myUri = Uri.parse(extras.getString("imageUri"));

然后你可以这样取它:

imageUri = Uri.parse(extras.getString("imageUri"));
private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString());
startActivity(intent);
this.finish();

Uri
类实现了
Parcelable
,因此您可以直接从
Intent

// Add a Uri instance to an Intent
intent.putExtra("imageUri", uri);

// Get a Uri from an Intent
Uri uri = intent.getParcelableExtra("imageUri");

您可以对实现
Parcelable
的任何对象使用相同的方法,如果需要,您可以在自己的对象上实现
Parcelable

在Intent中,您可以直接放置Uri。您不需要将Uri转换为字符串,然后再转换回Uri

看看这个简单的方法

// put uri to intent 
intent.setData(imageUri);
要从intent获取Uri,请执行以下操作:

// Get Uri from Intent
Uri imageUri=getIntent().getData();

你可以这样做。imageuri可以像这样转换成字符串

intent.putExtra(“imageUri”,imageUri.toString())

这里是我如何使用它; 此按钮位于我调用CameraActionActivity的活动类中

 btn_frag_camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intenImatToSec = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                startActivityForResult(intenImatToSec, REQUEST_CODE_VIDEO);
                //intenImatToSec.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                //intenImatToSec.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
                //Toast.makeText(getActivity(), "Hello From Camera", Toast.LENGTH_SHORT).show();
            }
        });



@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {

            if (requestCode == REQUEST_CODE_IMG) {
                Bundle bundle = data.getExtras();
                Bitmap bitmap = (Bitmap) bundle.get("data");
                Intent intentBitMap = new Intent(getActivity(), DisplayImage.class);
                // aldıgımız imagi burda yonlendirdiğimiz sınıfa iletiyoruz
                ByteArrayOutputStream _bs = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs);
                intentBitMap.putExtra("byteArray", _bs.toByteArray());
                startActivity(intentBitMap);

            } else if (requestCode == REQUEST_CODE_VIDEO) {
                Uri videoUrl = data.getData();
                Intent intenToDisplayVideo = new Intent(getActivity(), DisplayVideo.class);
                intenToDisplayVideo.putExtra("videoUri", videoUrl.toString());
                startActivity(intenToDisplayVideo);
            }
        }
    }
还有我的另一个显示视频活动课

VideoView videoView = (VideoView) findViewById(R.id.videoview_display_video_actvity);
Bundle extras = getIntent().getExtras();
        Uri myUri=  Uri.parse(extras.getString("videoUri"));
        videoView.setVideoURI(myUri);

如果要使用标准额外数据字段,请执行以下操作:

imageUri = Uri.parse(extras.getString("imageUri"));
private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString());
startActivity(intent);
this.finish();
意向书的文件说明:

EXTRA_STREAM   added in API level 1 
String EXTRA_STREAM
A content: URI holding a stream of data associated with the Intent,
used with ACTION_SEND to supply the data being sent. 

Constant Value: "android.intent.extra.STREAM"
您不必使用内置的标准名称,但这可能是一种很好的做法,而且更易于重用。查看开发人员文档中所有内置标准额外数据字段的列表。

Uri.parse(extras.getString(“imageUri”)导致错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Intent.putExtra(java.lang.String, android.os.Parcelable)' on a null object reference 
因此,我改为:

intent.putExtra("imageUri", imageUri)


这就解决了问题。

可能重复的ok cool。。。但我不知道如何将uri存储为字符串:(在上面的代码中,它被转换为字符串。imageuri.toString()正在为您将uri转换为字符串。@Malcocke有一个更好的解决方案。无需手动转换为字符串并返回。您可以使用intent.setData(imageuri);有一刻我想知道什么是“额外的”简单来说:
intent.putExtra(“imageUrl”,mimageri.toString());
在其他活动中
String imageUrl=getIntent().getStringExtra(“imageUrl”);
Uri mimageri=Uri.parse(imageUrl)未来任何人的提示:确保您使用的是
android.net.Uri
,而不是
java.net.Uri
!作为将来的参考,如果您在使用
intent.putExtras(Bundle);
之前在Bundle对象中添加了多个附加项,请使用
Bundle.putParcelable(“imageUri”,Uri);
而不是
intent.putExtra(…)
直接在
Intent
对象中。数组也可以工作!
i.putExtra(“URIList”,URIList.toArray());
->
List myList=i.getParcelableArrayListExtra(“URIList”);
放置
java.lang.NullPointerException时出错:尝试调用虚拟方法“android.content.Intent android.content.Intent.putExtra(java.lang.String,android.os.Parcelable)'在空对象引用上
警告:上述答案/解决方案不应用于本地广播,因为您可能会发现它们不会被接收。对于本地广播,最好使用Malcocke的答案:。