Sobes.tech
Junior

Bir Activity'dan boshqasiga ma'lumotlarni qanday o'tkazish mumkin?

sobes.tech AI

AIdan javob

Ma'lumotlarni uzatish usullari:

  1. Intent Ekstralari: Eng keng tarqalgan usul. Kalit-qiymat juftlari shaklida ma'lumotlar Intent ga qo'shiladi.

    // Yuboruvchi Activity da
    Intent intent = new Intent(this, TargetActivity.class);
    intent.putExtra("key_string", "Salom!");
    intent.putExtra("key_int", 42);
    intent.putExtra("key_boolean", true);
    startActivity(intent);
    
    // Qabul qiluvchi Activity da
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String stringData = extras.getString("key_string");
        int intData = extras.getInt("key_int");
        boolean booleanData = extras.getBoolean("key_boolean", false); // Standart qiymat bilan
    }
    

    Qo'llab-quvvatlanadigan turlar: primitivlar, String, Bundle, Parcelable, Serializable. Murakkab obyektlar uchun Parcelable afzalroq.

  2. ViewModel (LiveData yoki Channel bilan birga): Murakkabroq ssenariylar uchun mos, ekran burilishida yoki bir nechta komponentlar tomonidan foydalaniladigan ma'lumotlar uchun. Ma'lumotlar oqimi MutableLiveData yoki Channel orqali amalga oshirilishi mumkin.

    // Umumiy ViewModel da (masalan, host-Activity va fragmentlar uchun)
    private val _data = MutableLiveData<MyData>()
    val data: LiveData<MyData> = _data
    
    fun setData(newData: MyData) {
        _data.value = newData
    }
    
    // Yuboruvchi Activity/Fragment da
    viewModel.setData(MyData(...))
    
    // Qabul qiluvchi Activity/Fragment da ViewModel ni kuzatish
    viewModel.data.observe(viewLifecycleOwner) { data ->
        // Ma'lumotlardan foydalanish
    }
    
  3. Callback / Interfeys (Activity ni natija uchun ishga tushirish): Qabul qiluvchi Activity yuboruvchi Activity ga natijani qaytarishi kerak bo'lsa ishlatiladi.

    // Yuboruvchi Activity da
    ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent data = result.getData();
                if (data != null && data.getExtras() != null) {
                    String resultData = data.getExtras().getString("result_key");
                }
            }
        });
    
    // Activity ni ishga tushirish
    Intent intent = new Intent(this, TargetActivity.class);
    someActivityResultLauncher.launch(intent);
    
    // Qabul qiluvchi Activity da
    Intent resultIntent = new Intent();
    resultIntent.putExtra("result_key", "Natija");
    setResult(Activity.RESULT_OK, resultIntent);
    finish();
    
  4. Mahalliy ma'lumotlar bazasi / Shared Preferences / Ichki Storage: Katta hajmdagi ma'lumotlarni yoki saqlash kerak bo'lgan ma'lumotlarni uzatish uchun. Ma'lumotlar bir Activity da yoziladi va boshqa Activity da o'qiladi.

    // Yozish (Shared Preferences misoli)
    SharedPreferences sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString("saved_data", "Ma'lumotlar saqlandi");
    editor.apply();
    
    // O'qish (Shared Preferences misoli)
    SharedPreferences sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    String savedData = sharedPref.getString("saved_data", null);
    

    Bu yondashuv ma'lumotlarning hayot tsikmini boshqarish uchun qo'shimcha mantiqni talab qiladi (qachon o'chirish).

  5. Singleton / Global statik obyekt: Tavsiya etilmaydi chunki xotira oqib ketishi va arxitektura buzilishiga olib kelishi mumkin. Faqat cheklangan va juda oddiy holatlarda foydalaning.

    // Singleton sinfi
    public class DataHolder {
        private static final DataHolder instance = new DataHolder();
        private String data;
    
        private DataHolder() {}
    
        public static DataHolder getInstance() {
            return instance;
        }
    
        public String getData() {
            return data;
        }
    
        public void setData(String data) {
            this.data = data;
        }
    }
    
    // Yuboruvchi Activity da
    DataHolder.getInstance().setData("Singleton orqali ma'lumot");
    
    // Qabul qiluvchi Activity da
    String data = DataHolder.getInstance().getData();
    

Usul tanlovi ma'lumotlar hajmi, murakkabligi, saqlash ehtiyoji va Activitylar o'rtasidagi o'zaro ta'sirga bog'liq. Eng keng tarqalgan va tavsiya etilgan usullar - Intent Extras va ViewModel.