स्ट्रिंग डेटा के लिए putExtra () और getExtra () का उपयोग कैसे करें


318

क्या कोई मुझे बता सकता है कि कैसे उपयोग करना है getExtra()औरputExtra() इंटेंट्स के लिए? वास्तव में मेरे पास एक स्ट्रिंग वैरिएबल है, str कहते हैं, जो कुछ स्ट्रिंग डेटा संग्रहीत करता है। अब, मैं इस डेटा को एक गतिविधि से दूसरी गतिविधि पर भेजना चाहता हूं।

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
  String keyIdentifer  = null;
  i.putExtra(strName, keyIdentifer );

और फिर SecondScreen.java में

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
        TextView userName = (TextView)findViewById(R.id.userName);
        Bundle bundle = getIntent().getExtras();

        if(bundle.getString("strName")!= null)
        {
            //TODO here get the string stored in the string variable and do 
            // setText() on userName 
        }

    }

मैं जानता हूं कि यह बहुत बुनियादी सवाल है लेकिन दुर्भाग्य से मैं यहां फंस गया हूं। कृपया मदद कीजिए।

धन्यवाद,

संपादित करें: यहां वह स्ट्रिंग है जिसे मैं एक स्क्रीन से दूसरे स्क्रीन पर पारित करने की कोशिश कर रहा हूं। यही कारण है कि मेरे पास एक EditText है जहां मैं उपयोगकर्ता प्रकार जो भी स्ट्रिंग कर रहा हूं। फिर की मदद से myEditText.getText().toString()। मुझे एक स्ट्रिंग के रूप में दर्ज किया गया मान मिल रहा है फिर मुझे यह डेटा पास करना होगा।


i.putExtra (strName, keyIdentifer); इस कथन में strName वैरिएबल है जबकि bundle.getString ("strName") में "strName" स्ट्रिंग है। इसके इरादे ।putExtra (कुंजी, मूल्य) और इरादे ।getExtras ()। getString (कुंजी); सुनिश्चित करें कि आप पुट और पाने में एक ही कुंजी का उपयोग कर रहे हैं।
सीमा

जवाबों:


416

फ़ाइल का उपयोग "करने" के लिए करें ...

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);

फिर, मान प्राप्त करने के लिए कुछ इस तरह आज़माएँ:

String newString;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

10
अभिविन्यास परिवर्तनों को संभालने के लिए "saveInstanceState ..." और "... getSerialiable" कोड का उपयोग किया जाता है? यदि नहीं, तो उस कोड का उपयोग किस लिए किया जाता है?
AJW

मैं एंड्रॉइड 3.0.1 का उपयोग कर रहा हूं और मुझे उपयोग करना था this.getActivity().getIntent().getExtras()
टायलर

यदि आप PendingIntents का उपयोग करते हैं, तो आपको "PendingIntent.FLAG_UPDATE_CURRENT" ध्वज का उपयोग करने की आवश्यकता है: stackoverflow.com/a/29846408/2738240 इरादे इरादे = नया आशय (संदर्भ, MainActivity.class); आशय .putExtra ("button_id", 1); लंबित लंबित लंबित = PendingIntent.getActivity (संदर्भ, 0, आशय, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews के दृश्य = नए RemoteViews (संदर्भ.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, लंबित लंबित);
मथायस लुह

69

पहला स्क्रीन.जावा

text=(TextView)findViewById(R.id.tv1);
edit=(EditText)findViewById(R.id.edit);
button=(Button)findViewById(R.id.bt1);

button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        String s=edit.getText().toString();

        Intent ii=new Intent(MainActivity.this, newclass.class);
        ii.putExtra("name", s);
        startActivity(ii);
    }
});

दूसरी स्क्रीन.जावा

public class newclass extends Activity
{
    private TextView Textv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.intent);
        Textv = (TextView)findViewById(R.id.tv2);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {
            String j =(String) b.get("name");
            Textv.setText(j);
        }
    }
}

52

सबसे अच्छी विधि ...

SendingActivity

Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);  // pass your values and retrieve them in the other Activity using keyName
startActivity(intent);

RecievingActivity

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

/// डेटा प्राप्त करने का सबसे छोटा तरीका ।।

String data = getIntent().getExtras().getString("keyName","defaultKey");

// इसके लिए एपीआई 12. की आवश्यकता है। दूसरा पैरामीटर वैकल्पिक है। यदि keyName शून्य है तो defaultkeyडेटा के रूप में उपयोग करें ।


18

यह वही है जो मैं उपयोग कर रहा हूं, उम्मीद है कि यह किसी को मदद करता है .. सरल और समृद्ध।

डेटा भेजें

    intent = new Intent(getActivity(), CheckinActivity.class);
    intent.putExtra("mealID", meal.Meald);
    startActivity(intent);

डेटा प्राप्त करें

    int mealId;

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        mealId = bundle.getInt("mealID");
    }

चियर्स!


1
मुझे अभी भी अपने आप को याद दिलाना है, अब और फिर, यह कैसे ठीक से किया गया था .. योग्य!
सिंदरी 15ór

10

intentएंड्रॉइड में इसे लागू करना बहुत आसान है .. यह आपको एक गतिविधि से दूसरी गतिविधि पर ले जाने के लिए लेता है, हमें दो विधि करनी है putExtra();और getExtra();अब मैं आपको उदाहरण दिखा रहा हूं ..

    Intent intent = new Intent(activity_registration.this, activity_Login.class);
                intent.putExtra("AnyKeyName", Email.getText().toString());  // pass your values and retrieve them in the other Activity using AnyKeyName
                        startActivity(intent);

अब हमें AnyKeyNameपैरामीटर से मान प्राप्त करना होगा, नीचे उल्लिखित कोड ऐसा करने में मदद करेगा

       String data = getIntent().getExtras().getString("AnyKeyName");
        textview.setText(data);

हम Intentजहाँ भी आवश्यक हो , हम आसानी से प्राप्त मूल्य निर्धारित कर सकते हैं ।


6

एक छोटा सा परिशिष्ट: आपको कुंजी के लिए अपना नाम बनाने की आवश्यकता नहीं है, Android इन्हें प्रदान करता है, f.ex. Intent.EXTRA_TEXT। स्वीकृत उत्तर को संशोधित करना:

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra(Intent.EXTRA_TEXT, strName);

फिर, मान प्राप्त करने के लिए कुछ इस तरह आज़माएँ:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}

4
Intent intent = new Intent(view.getContext(), ApplicationActivity.class);
                        intent.putExtra("int", intValue);
                        intent.putExtra("Serializable", object);
                        intent.putExtra("String", stringValue);
                        intent.putExtra("parcelable", parObject);
                        startActivity(intent);

ApplicationActivity

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

if(bundle != null){
   int mealId = bundle.getInt("int");
   Object object = bundle.getSerializable("Serializable");
   String string = bundle.getString("String");
   T string = <T>bundle.getString("parcelable");
}

4

इंटेंट क्लास में अपडेट करें ।

  • hasExtra()अगर इरादे में कुंजी है तो जाँच के लिए उपयोग करें ।
  • अब आप getStringExtra()सीधे उपयोग कर सकते हैं ।

डेटा पास करें

intent.putExtra(PutExtraConstants.USER_NAME, "user");

डेटा प्राप्त करें

String userName;
if (getIntent().hasExtra(PutExtraConstants.USER_NAME)) {
    userName = getIntent().getStringExtra(PutExtraConstants.USER_NAME);
}

हमेशा सर्वश्रेष्ठ अभ्यास के रूप में स्थिरांक में कुंजियाँ रखें।

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}

PutExtraConstantsएक इंटरफ़ेस क्यों है ?
Big_Chair

@Big_Chair क्योंकि PutExtraConstantsवर्ग केवल स्थिरांक होता है ( public, static, final)। इसलिए कॉन्स्टेंट के लिए इंटरफ़ेस का उपयोग करना बेहतर है।
खेमराज

3

अधिक सरल

भेजने वाला पक्ष

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
i.putExtra("id","string data");
startActivity(i)

रिसीवर पक्ष

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");

3

आशय वस्तु में स्ट्रिंग रखो

  Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
  intent.putExtra("key",your_String);
  StartActivity(intent);

अगली विधि ऑनक्रिएट विधि में स्ट्रिंग प्राप्त करें

String my_string=getIntent().getStringExtra("key");

यह आसान और छोटा तरीका है


2

भेजने

startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));

प्राप्त

String myData = getIntent.getStringExtra("key");

1

समारोह रखो

etname=(EditText)findViewById(R.id.Name);
        tvname=(TextView)findViewById(R.id.tvName);

        b1= (ImageButton) findViewById(R.id.Submit);

        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String s=etname.getText().toString();

                Intent ii=new Intent(getApplicationContext(), MainActivity2.class);
                ii.putExtra("name", s);
                Toast.makeText(getApplicationContext(),"Page 222", Toast.LENGTH_LONG).show();
                startActivity(ii);
            }
        });



getfunction 

public class MainActivity2 extends Activity {
    TextView tvname;
    EditText etname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        tvname = (TextView)findViewById(R.id.tvName);
        etname=(EditText)findViewById(R.id.Name);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {

          String j2 =(String) b.get("name");

etname.setText(j2);
            Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_LONG).show();
        }
    }

1

डेटा पुश करें

import android.content.Intent;

    ...

    Intent intent = 
        new Intent( 
            this, 
            MyActivity.class );
    intent.putExtra( "paramName", "paramValue" );
    startActivity( intent );

उपरोक्त कोड मुख्य के अंदर हो सकता है activity। " MyActivity.class" वह दूसरा है जिसे Activityहम लॉन्च करना चाहते हैं; इसे आपकी AndroidManifest.xmlफ़ाइल में स्पष्ट रूप से शामिल किया जाना चाहिए ।

<activity android:name=".MyActivity" />

डेटा खींचो

import android.os.Bundle;

    ...

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        String myParam = extras.getString("paramName");
    }
    else
    {
        //..oops!
    }

इस उदाहरण में, उपरोक्त कोड आपकी MyActivity.javaफ़ाइल के अंदर होगा ।

gotchas

यह विधि केवल पास कर सकती है strings। तो चलिए बताते हैं कि आपको ArrayListअपने पास करने की आवश्यकता हैListActivity ; एक संभव समाधान एक अल्पविराम-अलग-स्ट्रिंग को पास करना है और फिर इसे दूसरी तरफ विभाजित करना है।

वैकल्पिक समाधान

उपयोग SharedPreferences


और क्या होगा अगर मैं string.xml से एक स्ट्रिंग पास करना चाहता हूं?
एचबी।

1

सरल, पहली गतिविधि में-

    EditText name= (EditText) findViewById(R.id.editTextName);
    Button button= (Button) findViewById(R.id.buttonGo);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("name",name.getText().toString());
           startActivity(i);
          }
    });

दूसरी गतिविधि में-

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    TextView t = (TextView) findViewById(R.id.textView);
    Bundle bundle=getIntent().getExtras();
    String s=bundle.getString("name");
    t.setText(s);
}

आप जोड़ सकते हैं यदि आप चाहते हैं तो / और स्थितियां।


1

FirstScreen.java पर

    Intent intent = new Intent(FirstScreen.this, SecondScreen.class);
    String keyIdentifier = null;
    intent.putExtra(strName, keyIdentifier);

SecondScreen.java पर

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);

एसओ में आपका स्वागत है! कृपया अपने उत्तर को संपादित करें और इस मुद्दे को हल करने के लिए थोड़ा क्यों और कैसे विस्तृत करें। अधिक मार्गदर्शन के लिए,
B - rian

0

पहले तार लगाओ

Intent secondIntent = new Intent(this, typeof(SecondActivity));
            secondIntent.PutExtra("message", "Greetings from MainActivity");

उसके बाद इसे पुनः प्राप्त करें

var message = this.Intent.GetStringExtra("message");

बस इतना ही ;)


-1

आप बस अपने एडिटटेक्स्ट के स्ट्रिंग को स्टोर करने के लिए स्टैटिक वेरिएबल का उपयोग कर सकते हैं और फिर उस वैरिएबल का इस्तेमाल दूसरी क्लास में कर सकते हैं। आशा है कि यह आपकी समस्या का समाधान करेगा


आप कर सकते हैं लेकिन आप :-)
ब्लंडेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.