Sobes.tech
Junior

Ինչպե՞ս փոխանցել տվյալները մեկ Activity-ից մյուսին Android-ում։

sobes.tech AI

Պատասխան AI-ից

Կան մի քանի եղանակներ.

  1. Intent Extras: Ամենատարածված միջոցը։ Տվյալները փաթեթավորվում են Bundle-ում և ավելացվում են Intent-ին։

    // Առաջին Activity-ում
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra(" բանալի ", " արժեք "); // Բազային տիպեր
    intent.putExtra(" օբյեկտ ", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Երկրորդ Activity-ում
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String արժեք = extras.getString(" բանալի ");
        MySerializableObject օբյեկտ = (MySerializableObject) extras.getSerializable(" օբյեկտ ");
    }
    
  2. Parcelable օբյեկտներ: Նման է Serializable-ին, բայց ավելի արդյունավետ է հաճախ փոխանցվող օբյեկտների համար։ Պահանջվում է Parcelable ինտերֆեյսի իրականացմանը։

    // Առաջին Activity-ում
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra(" parcelable_օբյեկտ ", new MyParcelableObject());
    startActivity(intent);
    
    // Երկրորդ Activity-ում
    Intent intent = getIntent();
    MyParcelableObject parcelableՕբյեկտ = intent.getParcelableExtra(" parcelable_օբյեկտ ");
    
  3. Shared Preferences: Հարմար է փոքր չափերի տվյալների փոխանցման համար, որոնք պետք է պահպանվեն ծրագրի գործարկումների միջև։

    // Առաջին Activity-ում
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(" բանալի ", " արժեք ");
    editor.apply(); // կամ commit()
    
    // Երկրորդ Activity-ում
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String արժեք = preferences.getString(" բանալի ", null); // null - ըստ նախնական արժեքի
    
  4. Ստատիկ փոփոխականներ: Չի խորհուրդ տրվում, քանի որ խախտում է OOP սկզբունքները և կարող է հանգեցնել հիշողության լքման։ Օգտագործեք զգուշությամբ և միայն շատ պարզ դեպքերում։

    // Ստատիկ դասում կամ ցանկացած այլ հասանելի ստատիկ փոփոխականում
    public static String staticData;
    
    // Առաջին Activity-ում
    StaticDataHolder.staticData = "տվյալներ";
    
    // Երկրորդ Activity-ում
    String տվյալներ = StaticDataHolder.staticData;
    
  5. Տվյալների բազա/Ֆայլ: Մեծ ծավալների կամ պերմանենտ տվյալների համար։ Տվյալները պահվում են բազայում (SQLite, Room) կամ ֆայլում, և երկրորդ Activity-ն կարդում է դրանք։

  6. ViewModel (համատեղ LiveData-ով): Մշակութային կոմպոնենտների շրջանակում ViewModel-ը նախընտրելի միջոց է UI-կապված տվյալների կառավարման համար։ Տվյալները Activity-ների միջև փոխանցվում են համատեղ ViewModel-ով կամ LiveData- ի միջոցներով։

    // Առաջին Activity-ում (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("data_key", "data_value")
    }
    startActivity(intent)
    
    // Երկրորդ Activity-ում (Kotlin)
    val data = intent.getStringExtra("data_key")
    

Ընտրությունը կախված է փոխանցվող տվյալների տեսակից և ծավալից, ինչպես նաև պերմանենտության պահանջներից։ Տվյալների փոխանցումը Intent Extras-ով սովորական է փոքր ծավալների համար և ուղիղ անցում կատարելու ժամանակ։