অ্যান্ড্রয়েডে অভিপ্রায় থেকে কীভাবে আমি অতিরিক্ত ডেটা পেতে পারি?


749

আমি কীভাবে একটি ক্রিয়াকলাপ (অভিপ্রায়) থেকে অন্যটিতে ডেটা পাঠাতে পারি?

আমি ডেটা প্রেরণে এই কোডটি ব্যবহার করি:

Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);

82
জাভা সাইড নোট: এটির মতো পূর্ণসংখ্যার "স্ট্রিংফাই" করা কখনই ভাল ধারণা নয় (বিশেষত উদাহরণস্বরূপ উদ্দেশ্যে) জাভাতে স্ট্রিং-এ রূপান্তর করার জন্য এটি প্রায়শই একটি ভাল, দ্রুত উপায় হিসাবে বিবেচিত হয়: user.getUserAccountId()+""কারণ এটি অপ্রয়োজনীয় অবজেক্ট তৈরি করবে সংগৃহীত হবে. ব্যবহার করার পরিবর্তে String.valueOf(user.getUserAccountId)বা Integer.toString(user.getUserAccountId)পরিবর্তে বিবেচনা করুন ।
pkk

5
@ অ্যান্ড্রু এস এটি কি ওয়েব নয়? "অভিপ্রায় থেকে ডেটা পান"
ম্যাকগুইল

@ অ্যান্ড্রুস আমি ম্যাকগুইলের সাথে একমত এছাড়াও, এই প্রশ্নটি কিছুক্ষণ আগে পোস্ট করা হয়েছিল যাতে উত্তর সম্ভবত তখন খুঁজে পাওয়া সহজ ছিল না। এবং যদি একই ধরণের প্রশ্নটি এখনও এসও-তে পোস্ট না করা হত, তবে এটি একটি বৈধ পোস্ট ছিল।
0xCursor

উত্তর:


1211

প্রথমে সেই অভিপ্রায়টি পান যা getIntent()পদ্ধতিটি ব্যবহার করে আপনার ক্রিয়াকলাপ শুরু করেছে :

Intent intent = getIntent();

যদি আপনার অতিরিক্ত ডেটা স্ট্রিং হিসাবে উপস্থাপিত হয় তবে আপনি intent.getStringExtra(String name)পদ্ধতিটি ব্যবহার করতে পারেন । আপনার ক্ষেত্রে:

String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");

6
আমি কোথা থেকে এই সমস্ত পদ্ধতি করতে পারি ??
অ্যাডাম

46
@ অ্যাডাম: আপনি যদি কোনও ক্রিয়াকলাপে থাকেন তবে অনক্রিটের মধ্যে থেকে, আপনি getIntent().getStringExtra("id");আইডি স্ট্রিংটি পেতে
ডাকেন

1
কলিং getIntent()পদ্ধতিতে আপনার ক্রিয়াকলাপ শুরু হওয়া অভিপ্রায়টি আপনি পেতে পারেন । আমি উত্তর আপডেট করেছি।
ম্যালকম

1
@ আইটলন যদি আপনার একটি নির্দিষ্ট গ্রন্থাগার নিয়ে সমস্যা থাকে তবে আপনার এটি সম্পর্কে একটি পৃথক প্রশ্ন তৈরি করা উচিত।
ম্যালকম

1
@ মেলকমম @ getExtra ()। GetString এবং getStringExtra () এর মধ্যে পার্থক্য কী?
অমিত ত্রিপাঠি

188

গ্রহণের ক্রিয়াকলাপে

Bundle extras = getIntent().getExtras(); 
String userName;

if (extras != null) {
    userName = extras.getString("name");
    // and get whatever type user account id is
}

6
এটি কেন বেশি পছন্দgetStringExtra?
ইগোরগানাপলস্কি

6
আমার ধারণাটি হ'ল: যদি অতিরিক্ত হতে পারে nullতবে পুরো অতিরিক্ত আনতে হবে। ব্যবহার করে getStringExtra, আপনি মূলত এটি একটি সিরিজে পরিবর্তন করুন if(extras != null) { return extras.getString(name) }getStringExtraআপনি কল প্রতিটি জন্য একটি। এই বিকল্পটি nullএকবার যাচাই করবে এবং যদি তা হয় তবে এটি পড়ার বিষয়টিকে মোটেই বিরক্ত করবে না Bundle। তদতিরিক্ত, getStringExtraসম্ভবত getExtrasপ্রতিটি সময় অভ্যন্তরীণভাবে জিজ্ঞাসা করা হবে । সুতরাং আপনার কাছে ফাংশনগুলিতে আরও কল রয়েছে।
ডানিয়েল সোনক

39
//  How to send value using intent from one class to another class
//  class A(which will send data)
    Intent theIntent = new Intent(this, B.class);
    theIntent.putExtra("name", john);
    startActivity(theIntent);
//  How to get these values in another class
//  Class B
    Intent i= getIntent();
    i.getStringExtra("name");
//  if you log here i than you will get the value of i i.e. john

31

অ্যাড-আপ

ডেটা সেট করুন

String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);

তথ্য নাও

String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    value = bundle.getString("sample_name");
}

17

ডেটা পাওয়ার জন্য আর একটি নতুন ইন্টেন্ট আরম্ভ করার পরিবর্তে কেবল এটি করুন:

String id = getIntent().getStringExtra("id");

11

যদি একটি খণ্ডন কার্যকলাপে ব্যবহৃত হয় তবে এটি ব্যবহার করে দেখুন:

প্রথম পৃষ্ঠাটি ফ্র্যাগমেন্টএটিভিটি প্রসারিত করে

Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);

খণ্ডে, আপনাকে কেবল getActivity()প্রথমে কল করতে হবে ,

দ্বিতীয় পৃষ্ঠা প্রসারিত অসম্পূর্ণ অংশ :

String receive = getActivity().getIntent().getExtras().getString("name");

1
এছাড়াও আপনি getExtras () এর পরিবর্তে getStringExtra ("নাম") ব্যবহার করতে পারেন get getString ("নাম")
প্লট

7

আপনি যদি খণ্ডগুলিতে অতিরিক্ত ডেটা পাওয়ার চেষ্টা করছেন তবে আপনি এটি ব্যবহার করে দেখতে পারেন:

ব্যবহার করে ডেটা রাখুন:

Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER);

ব্যবহার করে ডেটা পান:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


  getArguments().getInt(ARG_SECTION_NUMBER);
  getArguments().getString(ARG_SECTION_STRING);
  getArguments().getBoolean(ARG_SECTION_BOOL);
  getArguments().getChar(ARG_SECTION_CHAR);
  getArguments().getByte(ARG_SECTION_DATA);

}

6

অভিপ্রায় থেকে আপনি যে কোনও ধরণের অতিরিক্ত ডেটা পেতে পারেন, এটি কোনও বিষয় বা স্ট্রিং বা কোনও ধরণের ডেটা হলেও তা বিবেচনা করে না।

Bundle extra = getIntent().getExtras();

if (extra != null){
    String str1 = (String) extra.get("obj"); // get a object

    String str2 =  extra.getString("string"); //get a string
}

এবং সংক্ষিপ্ততম সমাধানটি হল:

Boolean isGranted = getIntent().getBooleanExtra("tag", false);

4

** তথ্য দ্বারা ডেটা রাখুন - **

 Intent intent = new Intent(mContext, HomeWorkReportActivity.class);
            intent.putExtra("subjectName","Maths");
            intent.putExtra("instituteId",22);
            mContext.startActivity(intent);

** অভিপ্রায় দ্বারা ডেটা পান - **

  String subName = getIntent().getStringExtra("subjectName");
  int insId  getIntent().getIntExtra("instituteId",0);

যদি আমরা ইন্টেন্ট দ্বারা পূর্ণসংখ্যার মান প্রেরণ করি । যখন আমাদের getInttent ()। getIntExtra ("ইনস্টিটিউটআইডি", 0) তে 2 য় প্যারামিটার 0 ব্যবহার করতে হবে অন্যথায় আমরা 0 ব্যবহার করি না তবে অ্যান্ড্রয়েড আমাকে ত্রুটি দেয়।


2

Kotlin

প্রথম ক্রিয়াকলাপ

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

দ্বিতীয় ক্রিয়াকলাপ

val value = getIntent().getStringExtra("key")

প্রস্তাবনা

আরও পরিচালিত উপায়ে সবসময় ধ্রুবক ফাইলে কীগুলি রাখুন।

companion object {
    val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}

1

কেবল একটি পরামর্শ:

আপনার আই.পুটেক্সট্রায় "আইডি" বা "নাম" ব্যবহার করার পরিবর্তে, আমি প্রস্তাব করব, যখন এটি বোধগম্য হবে, বর্তমান স্ট্যান্ডার্ড ক্ষেত্রগুলি যা পুটেক্সট্রা () এর সাথে ব্যবহার করা যেতে পারে ব্যবহার করে Intent.EXTRA_something।

ইন্টেন্টে (অ্যান্ড্রয়েড বিকাশকারী) একটি সম্পূর্ণ তালিকা পাওয়া যাবে ।


1

আমরা এটি সহজ উপায়ে করতে পারি:

ফার্স্টঅ্যাক্টিভিটিতে:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

দ্বিতীয় কার্যকলাপে:

    try {
        Intent intent = getIntent();

        String uid = intent.getStringExtra("uid");
        String pwd = intent.getStringExtra("pwd");

    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStringExtra_EX", e + "");
    }

1

প্রথম ক্রিয়াকলাপের সাথে মান সহ উদ্দেশ্যটি পাস করুন:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

দ্বিতীয় ক্রিয়াকলাপের উদ্দেশ্যে অভিপ্রায়;

Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");

আমরা মান প্রেরণ এবং মান পেতে অভিপ্রায় দুটি পদ্ধতি ব্যবহার করি। মান পাঠানোর জন্য আমরা ব্যবহার করব intent.putExtra("key", Value);এবং সময় অন্য কার্যকলাপের উপর অভিপ্রায় গ্রহণ আমরা ব্যবহার করবে intent.getStringExtra("key");যেমন অভিপ্রায় ডেটা পেতে Stringঅথবা অন্য কোনো প্রাপ্তিসাধ্য পদ্ধতি ব্যবহার তথ্য (অন্যান্য ধরনের পেতে Integer, Boolean, ইত্যাদি)। মানটি শনাক্তকরণের মূল কী হতে পারে এর অর্থ হ'ল আপনি কী মানটি ভাগ করছেন। আশা করি এটি আপনার পক্ষে কাজ করবে।


0

আপনি
ইচ্ছার মতো // ভ্যালুতেও এটি করতে পারেন

    Intent in = new Intent(MainActivity.this, Booked.class);
    in.putExtra("filter", "Booked");
    startActivity(in);

// অভিপ্রায় থেকে মান পেতে

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    String filter = bundle.getString("filter");

0

অভিপ্রায় থেকে অতিরিক্ত বিভিন্ন ধরণের পাওয়া

ইন্টেন্ট থেকে ডেটা অ্যাক্সেস করতে আপনার দুটি জিনিস জানা উচিত।

  • মূল
  • আপনার ডেটা ডেটা টাইপ।

বিভিন্ন ধরণের ডেটা ধরণের এক্সট্রাক্ট করার জন্য ইনটেন্ট ক্লাসে বিভিন্ন পদ্ধতি রয়েছে। দেখে মনে হচ্ছে

getIntent ()। XXXX (KEY) বা অভিপ্রায়।


সুতরাং আপনি যদি আপনার ভারিবেলের ডেটাটাইপ জানেন যা আপনি অন্যান্য কার্যকলাপে সেট করেছেন তবে আপনি সংশ্লিষ্ট পদ্ধতিটি ব্যবহার করতে পারেন।

অভিপ্রায় থেকে আপনার ক্রিয়াকলাপে স্ট্রিং পুনরুদ্ধারের উদাহরণ

String profileName = getIntent().getStringExtra("SomeKey");

বিভিন্ন ডেটা টাইপের বিভিন্ন পদ্ধতির বিভিন্ন ধরণের তালিকা

ইন্টেন্টের অফিসিয়াল ডকুমেন্টেশনে উপলভ্য পদ্ধতির তালিকা দেখতে পারেন ।


0

এটি অ্যাডাপ্টারের জন্য, ক্রিয়াকলাপের জন্য আপনাকে কেবলমাত্র আপনার অ্যাক্টিভিটির নামতে এমকন্টেক্সট পরিবর্তন করতে হবে এবং খণ্ডের জন্য আপনাকে অ্যাক্টিভিটি () এ MContext পরিবর্তন করতে হবে

 public static ArrayList<String> tags_array ;// static array list if you want to pass array data

      public void sendDataBundle(){
            tags_array = new ArrayList();
            tags_array.add("hashtag");//few array data
            tags_array.add("selling");
            tags_array.add("cityname");
            tags_array.add("more");
            tags_array.add("mobile");
            tags_array.add("android");
            tags_array.add("dress");
            Intent su = new Intent(mContext, ViewItemActivity.class);
            Bundle bun1 = new Bundle();
            bun1.putString("product_title","My Product Titile");
            bun1.putString("product_description", "My Product Discription");
            bun1.putString("category", "Product Category");
            bun1.putStringArrayList("hashtag", tags_array);//to pass array list 
            su.putExtras(bun1);
            mContext.startActivity(su);
        }

-2

আমি এখানে একটি উত্তর পোস্ট করেছি যা কিছু বিষয় সহ কিছুটা আরও বিশদে এই বিষয়টিকে কভার করে।

এটি ভ্যাপার এপিআই ব্যবহার করে , অ্যান্ড্রয়েড ডেভাকে সহজ করার জন্য আমি লিখেছি এমন একটি নতুন jQuery অনুপ্রেরিত অ্যান্ড্রয়েড কাঠামো। আপনি কীভাবে অ্যাক্টিভেটদের মধ্যে ডেটা সহজেই পাস করতে পারেন তার জন্য সেই উত্তরের উদাহরণটি দেখুন।

এছাড়াও এটি প্রদর্শিত হয় VaporIntent, যা আপনাকে পদ্ধতি কলগুলি চেইন করতে এবং ওভারলোডেড .put(...)পদ্ধতিটি ব্যবহার করতে দেয় :

$.Intent().put("data", "myData").put("more", 568)...

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


1
আমি বাষ্প এপিআই সম্পর্কে আপনার কয়েকটি উত্তর দেখেছি t এটি আকর্ষণীয় you আপনি কীভাবে এই ডেটাগুলি পাবেন (যেমন ইনটেন্ট.জেটেক্সট্রাস ()) ??
কালাই.জি

পরীক্ষা করে দেখুন এই যে, তা কিভাবে ইন্টেন্ট অতিরিক্ত পুনরুদ্ধার করতে ব্যাখ্যা করে। আরও বিশদ এখানে । এটা কি সাহায্য করে?
দারিয়াস

2
আমি মনে করি শৃঙ্খলিত পদ্ধতিতে খুব বেশি ওভারহেড থাকে। যদি আপনি এমন কোনও পদ্ধতিকে কল করছেন যা "এই "টিকে কেবল শৃঙ্খলাবদ্ধ হিসাবে চিহ্নিত করে (অর্থাত্" সেটটার ") এটি ওওপির ডিজাইনের নীতি লঙ্ঘন করছে। আমি সরলতা পছন্দ করি তবে আপনার যদি পদ্ধতিগুলির একটি শৃঙ্খলা থাকে তবে ডিবাগিং সম্ভবত ব্যথাও করতে পারে। আমি এপিআইতে মান দেখতে পাচ্ছি, আমি কেবল পদ্ধতিটিতে শৃঙ্খলাবদ্ধ হওয়ার সাথে একমত নই।
nckbrz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.