android - मैं एंड्रॉइड एप्लिकेशन में गतिविधियों के बीच डेटा कैसे पास करूं?




android-intent android-activity (20)

मेरे पास एक परिदृश्य है, जहां लॉगिन पेज के माध्यम से लॉग इन करने के बाद, प्रत्येक activity पर एक साइन-आउट button

साइन-आउट पर क्लिक करने पर, मैं साइन-इन करने के लिए साइन इन किए गए उपयोगकर्ता की session id पास कर दूंगा। क्या कोई मुझे मार्गदर्शन कर सकता है कि सभी activities लिए session id कैसे उपलब्ध कराया जाए?

इस मामले के लिए कोई विकल्प


पूरक उत्तर: कुंजी स्ट्रिंग के लिए नामकरण सम्मेलन

डेटा पास करने की वास्तविक प्रक्रिया का उत्तर पहले से ही दिया जा चुका है, हालांकि अधिकांश उत्तर इरादे में कुंजी नाम के लिए हार्ड कोडेड स्ट्रिंग का उपयोग करते हैं। यह आमतौर पर ठीक है जब केवल आपके ऐप के भीतर उपयोग किया जाता है। हालांकि, दस्तावेज मानकीकृत डेटा प्रकारों के लिए EXTRA_* स्थिरांक का उपयोग करने की सिफारिश करता है।

उदाहरण 1: Intent.EXTRA_* कुंजी का उपयोग करना

पहली गतिविधि

Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, "my text");
startActivity(intent);

दूसरी गतिविधि:

Intent intent = getIntent();
String myText = intent.getExtras().getString(Intent.EXTRA_TEXT);

उदाहरण 2: अपनी static final कुंजी को परिभाषित करना

यदि Intent.EXTRA_* स्ट्रिंग्स में से एक आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप पहली गतिविधि की शुरुआत में अपना खुद का परिभाषित कर सकते हैं।

static final String EXTRA_STUFF = "com.myPackageName.EXTRA_STUFF";

पैकेज नाम समेत केवल एक सम्मेलन है यदि आप केवल अपने ऐप में कुंजी का उपयोग कर रहे हैं। लेकिन अगर आप किसी प्रकार की सेवा बना रहे हैं तो अन्य ऐप्स विवादों से निपटने से बचने की आवश्यकता है।

पहली गतिविधि:

Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(EXTRA_STUFF, "my text");
startActivity(intent);

दूसरी गतिविधि:

Intent intent = getIntent();
String myText = intent.getExtras().getString(FirstActivity.EXTRA_STUFF);

उदाहरण 3: एक स्ट्रिंग संसाधन कुंजी का उपयोग करना

हालांकि दस्तावेज़ीकरण में उल्लेख नहीं किया गया है, यह उत्तर गतिविधियों के बीच निर्भरताओं से बचने के लिए एक स्ट्रिंग संसाधन का उपयोग करने की सिफारिश करता है।

strings.xml

 <string name="EXTRA_STUFF">com.myPackageName.MY_NAME</string>

पहली गतिविधि

Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(getString(R.string.EXTRA_STUFF), "my text");
startActivity(intent);

दूसरी गतिविधि

Intent intent = getIntent();
String myText = intent.getExtras().getString(getString(R.string.EXTRA_STUFF));

अपनी वर्तमान गतिविधि में, एक नया Intent बनाएं:

String value="Hello world";
Intent i = new Intent(CurrentActivity.this, NewActivity.class);    
i.putExtra("key",value);
startActivity(i);

फिर नई गतिविधि में, उन मानों को पुनर्प्राप्त करें:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
    //The key argument here must match that used in the other activity
}

एक गतिविधि से दूसरी गतिविधि में चर को पारित करने के लिए इस तकनीक का उपयोग करें।


आप SharedPreferences उपयोग कर सकते हैं ...

  1. लॉगिंग। SharedPreferences में टाइम स्टोर सत्र आईडी

    SharedPreferences preferences = getSharedPreferences("session",getApplicationContext().MODE_PRIVATE);
    Editor editor = preferences.edit();
    editor.putString("sessionId", sessionId);
    editor.commit();
    
  2. साइन आउट। साझा संदर्भों में समय लाने का सत्र आईडी

    SharedPreferences preferences = getSharedPreferences("session", getApplicationContext().MODE_PRIVATE);
    String sessionId = preferences.getString("sessionId", null);
    

यदि आपके पास आवश्यक सत्र आईडी नहीं है, तो साझा संदर्भ हटाएं:

SharedPreferences settings = context.getSharedPreferences("session", Context.MODE_PRIVATE);
settings.edit().clear().commit();

यह बहुत उपयोगी है, क्योंकि एक बार जब आप मूल्य को बचाते हैं और फिर गतिविधि के कहीं भी पुनर्प्राप्त करते हैं।


आप पार्ससेल योग्य वर्ग बनाकर कस्टम क्लास ऑब्जेक्ट्स भी पास कर सकते हैं। इसे पार्सल करने योग्य बनाने का सबसे अच्छा तरीका है अपनी कक्षा लिखना और फिर इसे http://www.parcelabler.com/ जैसी साइट पर पेस्ट http://www.parcelabler.com/ । निर्माण पर क्लिक करें और आपको नया कोड मिल जाएगा। यह सब कॉपी करें और मूल वर्ग सामग्री को प्रतिस्थापित करें। फिर-

Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo", foo);
startActivity(intent);

और परिणामस्वरूप अगली गतिविधि में परिणाम प्राप्त करें-

Foo foo = getIntent().getExtras().getParcelable("foo");

अब आप केवल foo ऑब्जेक्ट का उपयोग कर सकते हैं जैसे आप इस्तेमाल करते थे।


आप साझा वरीयता का प्रयास कर सकते हैं, यह गतिविधियों के बीच डेटा साझा करने के लिए एक अच्छा विकल्प हो सकता है

सत्र आईडी को सहेजने के लिए -

SharedPreferences pref = myContexy.getSharedPreferences("Session 
Data",MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("Session ID", session_id);
edit.commit();

उन्हें पाने के लिए -

SharedPreferences pref = myContexy.getSharedPreferences("Session Data", MODE_PRIVATE);
session_id = pref.getInt("Session ID", 0);

इसे इस्तेमाल करे:

CurrentActivity.java

Intent intent = new Intent(currentActivity.this, TargetActivity.class);
intent.putExtra("booktype", "favourate");
startActivity(intent);

TargetActivity.java

Bundle b = getIntent().getExtras();
String typesofbook = b.getString("booktype");

एरिच ने नोट किया कि पासिंग Intent अतिरिक्त एक अच्छा दृष्टिकोण है।

हालांकि, ऑब्जेक्ट ऑब्जेक्ट एक और तरीका है, और कभी-कभी कई गतिविधियों में एक ही राज्य से निपटने के दौरान यह कभी-कभी आसान होता है (जैसा कि इसे हर जगह प्राप्त करने / रखने के विपरीत), या प्राइमेटिव्स और स्ट्रिंग्स से अधिक जटिल वस्तुएं होती हैं।

आप एप्लिकेशन का विस्तार कर सकते हैं, और उसके बाद जो कुछ भी चाहते हैं उसे सेट / प्राप्त करें और getApplication() साथ किसी भी गतिविधि (उसी एप्लिकेशन में) से इसे एक्सेस करें।

यह भी ध्यान रखें कि अन्य दृष्टिकोण जो आप देख सकते हैं, जैसे स्टेटिक्स, समस्याग्रस्त हो सकते हैं क्योंकि वे स्मृति रिसाव का कारण बन सकते हैं । आवेदन भी इसे हल करने में मदद करता है।


ऐसा करने का सबसे आसान तरीका सत्र आईडी को उस गतिविधि में साइनआउट गतिविधि को पास करना होगा जिसका उपयोग आप गतिविधि शुरू करने के लिए कर रहे हैं:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

अगली गतिविधि पर उस इरादे को एक्सेस करें

String s = getIntent().getStringExtra("EXTRA_SESSION_ID");

इरादों के लिए docs में अधिक जानकारी है ("अतिरिक्त" शीर्षक वाले अनुभाग को देखें)।


गतिविधियों के बीच डेटा पारित करने का सबसे सुविधाजनक तरीका इरादों से गुज़रना है। पहली गतिविधि में जहां से आप डेटा भेजना चाहते हैं, आपको कोड जोड़ना चाहिए,

String str = "My Data"; //Data you want to send
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("name",str); //Here you will add the data into intent to pass bw activites
v.getContext().startActivity(intent);

आपको आयात करना चाहिए

import android.content.Intent;

फिर अगली Acitvity (SecondActivity) में, आपको निम्न कोड का उपयोग करके इरादे से डेटा पुनर्प्राप्त करना चाहिए।

String name = this.getIntent().getStringExtra("name");

चार्ली कॉलिन्स ने मुझे Application.class का उपयोग करके एक सही answer दिया। मुझे पता नहीं था कि हम इसे आसानी से उपclass कर सकते हैं। कस्टम एप्लिकेशन क्लास का उपयोग करके एक सरलीकृत उदाहरण यहां दिया गया है।

AndroidManifest.xml

android:name दें android:name अपनी विशेषता वर्ग का उपयोग करने के लिए android:name विशेषता।

...
<application android:name="MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
....

MyApplication.java

इसे वैश्विक संदर्भ धारक के रूप में उपयोग करें। यह एक ही प्रक्रिया के भीतर ठीक काम करता है।

public class MyApplication extends Application {
    private MainActivity mainActivity;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public void setMainActivity(MainActivity activity) { this.mainActivity=activity; }
    public MainActivity getMainActivity() { return mainActivity; }
}

MainActivity.java

एप्लिकेशन उदाहरण के लिए वैश्विक "सिंगलटन" संदर्भ सेट करें।

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ((MyApplication)getApplication()).setMainActivity(this);
    }
    ...

}

MyPreferences.java

एक साधारण उदाहरण जहां मैं किसी अन्य गतिविधि उदाहरण से मुख्य गतिविधि का उपयोग करता हूं।

public class MyPreferences extends PreferenceActivity
            implements SharedPreferences.OnSharedPreferenceChangeListener {
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        PreferenceManager.getDefaultSharedPreferences(this)
            .registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        if (!key.equals("autostart")) {
            ((MyApplication)getApplication()).getMainActivity().refreshUI();
        }
    }
}

मानक दृष्टिकोण।

Intent i = new Intent(this, ActivityTwo.class);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
String getrec=textView.getText().toString();
Bundle bundle = new Bundle();
bundle.putString(“stuff”, getrec);
i.putExtras(bundle);
startActivity(i);

अब आपकी दूसरी गतिविधि में बंडल से अपना डेटा पुनर्प्राप्त करें:

बंडल प्राप्त करें

Bundle bundle = getIntent().getExtras();

डेटा निकालें ...

String stuff = bundle.getString(“stuff”); 

मैं कक्षा में स्थिर फ़ील्ड का उपयोग करता हूं, और उन्हें प्राप्त / सेट करता हूं:

पसंद:

public class Info
{
    public static int ID      = 0;
    public static String NAME = "TEST";
}

मूल्य प्राप्त करने के लिए, इसे किसी गतिविधि में उपयोग करें:

Info.ID
Info.NAME

मूल्य निर्धारित करने के लिए:

Info.ID = 5;
Info.NAME = "USER!";

यह मुझे संदर्भ में चीजों को देखने में मदद करता है। यहां दो उदाहरण दिए गए हैं।

डेटा अग्रेषित करना

मुख्य गतिविधि

  • एक कुंजी-मूल्य जोड़ी के साथ एक इरादे में जिस डेटा को आप भेजना चाहते हैं उसे रखें। कुंजी के लिए सम्मेलन नामकरण के लिए यह उत्तर देखें।
  • प्रारंभ गतिविधि के साथ दूसरी गतिविधि शुरू करें।

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // "Go to Second Activity" button click
    public void onButtonClick(View view) {

        // get the text to pass
        EditText editText = (EditText) findViewById(R.id.editText);
        String textToPass = editText.getText().toString();

        // start the SecondActivity
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra(Intent.EXTRA_TEXT, textToPass);
        startActivity(intent);
    }
}

दूसरी गतिविधि

  • आप दूसरी गतिविधि शुरू करने वाले Intent को पाने के लिए getIntent() का उपयोग करते हैं। फिर आप getExtras() और कुंजी को पहली गतिविधि में परिभाषित कुंजी के साथ डेटा निकाल सकते हैं। चूंकि हमारा डेटा एक स्ट्रिंग है, इसलिए हम यहां getStringExtra का उपयोग करेंगे।

SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // get the text from MainActivity
        Intent intent = getIntent();
        String text = intent.getStringExtra(Intent.EXTRA_TEXT);

        // use the text in a TextView
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(text);
    }
}

डेटा वापस पास करना

मुख्य गतिविधि

  • startActivityForResult साथ दूसरी गतिविधि प्रारंभ करें, इसे एक मनमाना परिणाम कोड प्रदान करें।
  • onActivityResult ओवरराइड करें। यह दूसरी गतिविधि समाप्त होने पर कहा जाता है। आप यह सुनिश्चित कर सकते हैं कि परिणाम कोड की जांच करके यह वास्तव में दूसरी गतिविधि है। (यह तब उपयोगी होता है जब आप एक ही मुख्य गतिविधि से कई अलग-अलग गतिविधियां शुरू कर रहे हैं।)
  • वापसी के Intent से प्राप्त डेटा निकालें। एक कुंजी-मूल्य जोड़ी का उपयोग कर डेटा निकाला जाता है। मैं कुंजी के लिए किसी भी स्ट्रिंग का उपयोग कर सकता हूं लेकिन मैं पूर्वनिर्धारित Intent.EXTRA_TEXT उपयोग Intent.EXTRA_TEXT क्योंकि मैं टेक्स्ट भेज रहा हूं।

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final int SECOND_ACTIVITY_REQUEST_CODE = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // "Go to Second Activity" button click
    public void onButtonClick(View view) {

        // Start the SecondActivity
        Intent intent = new Intent(this, SecondActivity.class);
        startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);
    }

    // This method is called when the second activity finishes
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // check that it is the SecondActivity with an OK result
        if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {

                // get String data from Intent
                String returnString = data.getStringExtra(Intent.EXTRA_TEXT);

                // set text view with string
                TextView textView = (TextView) findViewById(R.id.textView);
                textView.setText(returnString);
            }
        }
    }
}

दूसरी गतिविधि

  • उस डेटा को रखें जिसे आप पिछली गतिविधि पर किसी Intent में वापस भेजना चाहते हैं। एक कुंजी-मूल्य जोड़ी का उपयोग कर Intent में डेटा संग्रहीत किया जाता है। मैंने अपनी कुंजी के लिए Intent.EXTRA_TEXT का उपयोग करना चुना।
  • परिणाम RESULT_OK सेट करें और अपना डेटा धारण करने का इरादा जोड़ें।
  • दूसरी गतिविधि को बंद करने के लिए कॉल finish()

SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    // "Send text back" button click
    public void onButtonClick(View view) {

        // get the text from the EditText
        EditText editText = (EditText) findViewById(R.id.editText);
        String stringToPassBack = editText.getText().toString();

        // put the String to pass back into an Intent and close this activity
        Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_TEXT, stringToPassBack);
        setResult(RESULT_OK, intent);
        finish();
    }
}

यहां मेरा सबसे अच्छा अभ्यास है और यह परियोजना बहुत बड़ी और जटिल होने पर बहुत मदद करता है।

मान लीजिए कि मेरे पास 2 गतिविधियां हैं, LoginActivity और HomeActivity । मैं LoginActivity से LoginActivity तक 2 पैरामीटर (उपयोगकर्ता नाम और पासवर्ड) पास करना चाहता HomeActivity

सबसे पहले, मैं अपना HomeIntent बना देता हूं

public class HomeIntent extends Intent {

    private static final String ACTION_LOGIN = "action_login";
    private static final String ACTION_LOGOUT = "action_logout";

    private static final String ARG_USERNAME = "arg_username";
    private static final String ARG_PASSWORD = "arg_password";


    public HomeIntent(Context ctx, boolean isLogIn) {
        this(ctx);
        //set action type
        setAction(isLogIn ? ACTION_LOGIN : ACTION_LOGOUT);
    }

    public HomeIntent(Context ctx) {
        super(ctx, HomeActivity.class);
    }

    //This will be needed for receiving data
    public HomeIntent(Intent intent) {
        super(intent);
    }

    public void setData(String userName, String password) {
        putExtra(ARG_USERNAME, userName);
        putExtra(ARG_PASSWORD, password);
    }

    public String getUsername() {
        return getStringExtra(ARG_USERNAME);
    }

    public String getPassword() {
        return getStringExtra(ARG_PASSWORD);
    }

    //To separate the params is for which action, we should create action
    public boolean isActionLogIn() {
        return getAction().equals(ACTION_LOGIN);
    }

    public boolean isActionLogOut() {
        return getAction().equals(ACTION_LOGOUT);
    }
}

यहां बताया गया है कि मैं अपने लॉगिन एक्टिविटी में डेटा कैसे पास करता हूं

public class LoginActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        String username = "phearum";
        String password = "pwd1133";
        final boolean isActionLogin = true;
        //Passing data to HomeActivity
        final HomeIntent homeIntent = new HomeIntent(this, isActionLogin);
        homeIntent.setData(username, password);
        startActivity(homeIntent);

    }
}

अंतिम चरण, यहां बताया गया है कि मुझे HomeActivity में डेटा कैसे प्राप्त होता है

public class HomeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        //This is how we receive the data from LoginActivity
        //Make sure you pass getIntent() to the HomeIntent constructor
        final HomeIntent homeIntent = new HomeIntent(getIntent());
        Log.d("HomeActivity", "Is action login?  " + homeIntent.isActionLogIn());
        Log.d("HomeActivity", "username: " + homeIntent.getUsername());
        Log.d("HomeActivity", "password: " + homeIntent.getPassword());
    }
}

किया हुआ! अच्छा :) मैं बस अपना अनुभव साझा करना चाहता हूं। यदि आप छोटी परियोजना पर काम कर रहे हैं तो यह बड़ी समस्या नहीं होनी चाहिए। लेकिन जब आप बड़ी परियोजना पर काम करते हैं, तो जब आप रीफैक्टरिंग या बग फिक्स करना चाहते हैं तो यह वास्तव में दर्द होता है।


यदि आप सक्रियण / टुकड़ों के बीच बिटमैप को ट्रांसफर करना चाहते हैं

गतिविधि

सक्रियताओं के बीच बिटमैप पास करने के लिए

Intent intent = new Intent(this, Activity.class);
intent.putExtra("bitmap", bitmap);

और गतिविधि वर्ग में

Bitmap bitmap = getIntent().getParcelableExtra("bitmap");

टुकड़ा

टुकड़ों के बीच एक बिटमैप पास करने के लिए

SecondFragment fragment = new SecondFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
fragment.setArguments(bundle);

द्वितीय फ्रेगमेंट के अंदर प्राप्त करने के लिए

Bitmap bitmap = getArguments().getParcelable("bitmap");

बड़े बिटमैप्स ट्रांसफर करना

यदि आप असफल बाइंडर लेनदेन प्राप्त कर रहे हैं, तो इसका मतलब है कि आप एक गतिविधि से दूसरे गतिविधि में बड़े तत्व को स्थानांतरित करके बाइंडर लेनदेन बफर से अधिक हो रहे हैं।

तो उस स्थिति में आपको बिटमैप को बाइट की सरणी के रूप में संपीड़ित करना होगा और फिर इसे किसी अन्य गतिविधि में असम्पीडित करना होगा , इस तरह

प्रथम गतिविधि में

Intent intent = new Intent(this, SecondActivity.class);

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPG, 100, stream);
byte[] bytes = stream.toByteArray(); 
intent.putExtra("bitmapbytes",bytes);

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

byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

अपडेट किया गया नोट कि मैंने SharedPreference के उपयोग का उल्लेख किया था। इसमें एक साधारण एपीआई है और एप्लिकेशन की गतिविधियों में पहुंच योग्य है। लेकिन यह एक बेवकूफ समाधान है, और यदि आप संवेदनशील डेटा पास करते हैं तो यह एक सुरक्षा जोखिम है। इरादों का उपयोग करना सबसे अच्छा है। इसमें ओवरलोडेड विधियों की विस्तृत सूची है जिसका उपयोग गतिविधियों के बीच कई अलग-अलग डेटा प्रकारों को बेहतर स्थानांतरित करने के लिए किया जा सकता है। intent.putExtra पर एक नज़र intent.putExtra । यह link PutExtra के उपयोग को अच्छी तरह से प्रस्तुत करता है।

गतिविधियों के बीच डेटा पास करने में, मेरा पसंदीदा दृष्टिकोण प्रासंगिक गतिविधि के लिए एक स्थिर विधि बनाना है जिसमें आवश्यक पैरामीटर शामिल हैं, इरादे को लॉन्च करें। जो तब आसानी से सेटअप और पैरामीटर पुनर्प्राप्त प्रदान करता है। तो यह इस तरह दिख सकता है

public class MyActivity extends Activity {
    public static final String ARG_PARAM1 = "arg_param1";
...
public static getIntent(Activity from, String param1, Long param2...) {
    Intent intent = new Intent(from, MyActivity.class);
        intent.putExtra(ARG_PARAM1, param1);
        intent.putExtra(ARG_PARAM2, param2);
        return intent;
}

....
// Use it like this.
startActivity(MyActvitiy.getIntent(FromActivity.this, varA, varB, ...));
...

फिर आप इच्छित गतिविधि के लिए एक इरादा बना सकते हैं और सुनिश्चित कर सकते हैं कि आपके पास सभी पैरामीटर हैं। आप टुकड़ों के लिए अनुकूलित कर सकते हैं। ऊपर एक साधारण उदाहरण है, लेकिन आपको विचार मिलता है।


If you use kotlin:

In MainActivity1:

var intent=Intent(this,MainActivity2::class.java)
intent.putExtra("EXTRA_SESSION_ID",sessionId)
startActivity(intent)

In MainActivity2:

if (intent.hasExtra("EXTRA_SESSION_ID")){
    var name:String=intent.extras.getString("sessionId")
}

There are multiple ways to pass data between activities, and the documentation has many of them.

For most cases, Intent.putExtras is enough.


You can use Intent

Intent mIntent = new Intent(FirstActivity.this, SecondActivity.class);
mIntent.putExtra("data", data);
startActivity(mIntent);

Another way you can use singleton pattern also:

public class DataHolder {

private static DataHolder dataHolder;
private List<Model> dataList;

public void setDataList(List<Model>dataList) {
    this.dataList = dataList;
}

public List<Model> getDataList() {
    return dataList;
}

public synchronized static DataHolder getInstance() {
    if (dataHolder == null) {
       dataHolder = new DataHolder();
    }
    return dataHolder;
}

}

From your FirstActivity

private List<Model> dataList = new ArrayList<>();
DataHolder.getInstance().setDataList(dataList);

On SecondActivity

private List<Model> dataList = DataHolder.getInstance().getDataList();

/*
 * If you are from transferring data from one class that doesn't
 * extend Activity, then you need to do something like this.
 */ 

public class abc {
    Context context;

    public abc(Context context) {
        this.context = context;
    }

    public void something() {
        context.startactivity(new Intent(context, anyone.class).putextra("key", value));
    }
}




android-activity