Sobes.tech
Junior

Androidda bir Activitydan boshqasiga ma'lumotlarni qanday o'tkazish mumkin?

sobes.tech AI

AIdan javob

Bir nechta usullar mavjud:

  1. Intent Extras: Eng keng tarqalgan usul. Ma'lumotlar Bundle ga paketlanadi va Intent ga qo'shiladi.

    // Birinchi Activity da
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("kalit", "qiymat"); // Primitiv turlar
    intent.putExtra("obyekt", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Ikkinchi Activity da
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String qiymat = extras.getString("kalit");
        MySerializableObject obyekt = (MySerializableObject) extras.getSerializable("obyekt");
    }
    
  2. Parcelable Ob'ektlar: Serializable ga o'xshash, lekin ko'proq ishlatiladigan ob'ektlar uchun samaraliroq. Parcelable interfeysini amalga oshirishni talab qiladi.

    // Birinchi Activity da
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_obyekt", new MyParcelableObject());
    startActivity(intent);
    
    // Ikkinchi Activity da
    Intent intent = getIntent();
    MyParcelableObject parcelableObyekt = intent.getParcelableExtra("parcelable_obyekt");
    
  3. Shared Preferences: Kichik ma'lumotlarni uzatish uchun mos keladi, ular ilova ishga tushirilganlar o'rtasida saqlanadi.

    // Birinchi Activity da
    SharedPreferences preferences = getSharedPreferences("mening_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("kalit", "qiymat");
    editor.apply(); // yoki commit()
    
    // Ikkinchi Activity da
    SharedPreferences preferences = getSharedPreferences("mening_prefs", MODE_PRIVATE);
    String qiymat = preferences.getString("kalit", null); // null - standart qiymat
    
  4. Statik o'zgaruvchilar: Tavsiya etilmaydi, chunki bu OOP tamoyillarini buzadi va xotira oqib ketishiga olib kelishi mumkin. Faqat juda oddiy holatlar uchun ehtiyotkorlik bilan foydalaning.

    // Statik sinfda yoki boshqa kirish mumkin bo'lgan statik o'zgaruvchida
    public static String statikMa'lumot;
    
    // Birinchi Activity da
    StaticDataHolder.statikMa'lumot = "ma'lumot";
    
    // Ikkinchi Activity da
    String ma'lumot = StaticDataHolder.statikMa'lumot;
    
  5. Ma'lumotlar bazasi/Fayl: Katta hajmdagi ma'lumotlar yoki doimiy bo'lishi kerak bo'lgan ma'lumotlar uchun. Ma'lumotlar SQLite, Room bazasida yoki faylda saqlanadi va ikkinchi Activity ularni o'qiydi.

  6. ViewModel (LiveData bilan birga): Arxitektura komponentlari kontekstida, ViewModel UI bilan bog'liq ma'lumotlarni boshqarish uchun afzal qilingan usuldir. Ma'lumotlar Activitylar o'rtasida umumiy ViewModel yoki LiveData voqealari orqali uzatiladi.

    // Birinchi Activity da (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("ma'lumot_kluchi", "ma'lumot_qiymati")
    }
    startActivity(intent)
    
    // Ikkinchi Activity da (Kotlin)
    val ma'lumot = intent.getStringExtra("ma'lumot_kluchi")
    

Ma'lumotlarni uzatish usulini tanlash, uzatiladigan ma'lumotlarning turi va hajmiga, shuningdek, doimiylik talablariga bog'liq. Intent Extras orqali ma'lumot uzatish kichik hajmdagi ma'lumotlar va to'g'ridan-to'g'ri Activitylar o'rtasida o'tish uchun standart hisoblanadi.