কীভাবে কোনও ইউআরআই পাস করবেন?


101

অন্য কোনও ক্রিয়াকলাপে সেই ইউআরআই ব্যবহার করার জন্য আমি আমার অভিপ্রায়টিতে একটি ইউআরআই-অবজেক্ট পাস করার চেষ্টা করছি ...

আমি কীভাবে ইউআরআই পাস করব?

private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);
startActivity(intent);
this.finish();

আমার অন্যান্য ক্রিয়াকলাপে আমি এখন কীভাবে এই ইউআরআই ব্যবহার করব?

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

তোমাদেরকে ধন্যবাদ



উত্তর:


180

আপনি স্ট্রিং হিসাবে ইউরি সঞ্চয় করতে পারেন

intent.putExtra("imageUri", imageUri.toString());

এবং তারপরে এই স্ট্রিংটিকে আবার ইউরিতে রূপান্তর করুন

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

4
ঠিক আছে ... তবে আমি জানি না কীভাবে স্ট্রিং হিসাবে ইউরি সংরক্ষণ করতে হবে :(
রবার্ট এল

উপরের কোডে এটি একটি স্ট্রিতে রূপান্তরিত হয়েছে। ইমেজুরি.টোস্ট্রিং () আপনার জন্য ইউআরিকে একটি স্ট্রিংয়ে রূপান্তর করছে।
রাফলেজ

4
@ লম্বা ক্লোকের আরও ভাল সমাধান রয়েছে। স্ট্রিং এবং পিছনে ম্যানুয়ালি রূপান্তর করার দরকার নেই।
ক্লকস্মিথ

আপনি ইন্টেন্ট.সেটডাটা (ইমেজউড়ি) ব্যবহার করতে পারেন;
বুন্টুপানা

4
এক মুহূর্তের জন্য আমি ভাবছিলাম "অতিরিক্ত" কী বোঝায়। সহজ কথায়: intent.putExtra("imageUrl", mImageUri.toString()); অন্যান্য ক্রিয়াকলাপে String imageUrl = getIntent().getStringExtra("imageUrl"); Uri mImageUri = Uri.parse(imageUrl);
ব্রায়ান

139

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নিজের জিনিসগুলিতে প্রয়োগ করতে পারেন ।


10
ভবিষ্যতের যে কাউকে ইঙ্গিত: নিশ্চিত করুন যে আপনি ব্যবহার করছেন android.net.Uriএবং না java.net.URI!
কালেব জ্যারেস

4
ভবিষ্যতের রেফারেন্সের জন্য, আপনি intent.putExtras(bundle);ব্যবহারের আগে যদি কোনও বান্ডিল অবজেক্টে বেশ কয়েকটি অতিরিক্ত রাখছেন তবে সরাসরি অবজেক্টে ব্যবহার bundle.putParcelable("imageUri", uri);না করে ব্যবহার করুন । intent.putExtra(...);Intent
আরমান্ডো

অ্যারে কাজ করে! i.putExtra("URIList", uriList.toArray());->List<Uri> myList = i.getParcelableArrayListExtra("URIList");
পিয়েরে

রাখার সময় এই ত্রুটিটি পেয়েছিল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
ওমর বোশরা

53

উদ্দেশ্য হিসাবে, আপনি সরাসরি উরি লাগাতে পারেন। আপনাকে উরিকে স্ট্রিংয়ে রূপান্তর করতে হবে এবং আবার উরিতে রূপান্তর করতে হবে না।

এই সহজ পদ্ধতির তাকান।

// put uri to intent 
intent.setData(imageUri);

এবং উদ্দেশ্য থেকে উরি ফিরে পেতে:

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

4
সতর্কতা: উপরের উত্তর / সমাধান স্থানীয় সম্প্রচারের জন্য ব্যবহার করা উচিত নয় কারণ আপনি দেখতে পাবেন যে সেগুলি পাবেন না। : স্থানীয় সম্প্রচার জন্য, এটি ব্যবহার malclocke এর উত্তর ভাল stackoverflow.com/a/13981436/1617737
নিষিদ্ধ-জিওইনজিনিয়ারিং

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


এবং তারপরে আপনি এটি এ জাতীয়ভাবে আনতে পারেন:

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

1

এখানে আমি এটি কিভাবে ব্যবহার করি; আমার ক্যামেরাঅ্যাক্টিভিটি ক্রিয়াকলাপ শ্রেণীর ভিতরে এই বোতামটি যেখানে আমি ক্যামেরা কল করি

 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);

1

আপনি যদি অতিরিক্ত অতিরিক্ত ডেটা ক্ষেত্র ব্যবহার করতে চান তবে আপনি এই জাতীয় কিছু করবেন:

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"

আপনাকে অন্তর্নির্মিত মানক নামগুলি ব্যবহার করতে হবে না তবে এটি সম্ভবত ভাল অনুশীলন এবং আরও পুনরায় ব্যবহারযোগ্য। সমস্ত অন্তর্নির্মিত মানক অতিরিক্ত ডেটা ক্ষেত্রগুলির তালিকার জন্য বিকাশকারী ডকুমেন্টেশনটি একবার দেখুন।


0

এর 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)

এবং

Uri uri = (Uri) getIntent().get("imageUri");

এটি সমস্যার সমাধান করেছে।


-2

আপনি এই মত করতে পারেন। ইমেজুরি এভাবে স্ট্রিংয়ে রূপান্তরিত হতে পারে।

ইন্টেন্ট.পুটেক্সট্রা ("ইমেজউরি", ইমেজ ইউরি.টোস্ট্রিং ());

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.