Bir Activity'dan boshqasiga ma'lumotlarni qanday o'tkazish mumkin?
sobes.tech AI
AIdan javob
Ma'lumotlarni uzatish usullari:
-
Intent Ekstralari: Eng keng tarqalgan usul. Kalit-qiymat juftlari shaklida ma'lumotlar
Intentga 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 uchunParcelableafzalroq. -
ViewModel (LiveData yoki Channel bilan birga): Murakkabroq ssenariylar uchun mos, ekran burilishida yoki bir nechta komponentlar tomonidan foydalaniladigan ma'lumotlar uchun. Ma'lumotlar oqimi
MutableLiveDatayokiChannelorqali 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 } -
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(); -
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).
-
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.