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. სტატიკური ცვლადები: არ არის რეკომენდებული, რადგან არღვევს ობიექტზე ორიენტირებულ პროგრამირებას და შეიძლება გამოიწვიოს მეხსიერების გაჟონვა. გამოიყენეთ ფრთხილად და მხოლოდ ძალიან მარტივ შემთხვევებში.

    // სტატიკურ კლასში ან სხვა ხელმისაწვდომ სტატიკურ ცვლადში
    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-ის საშუალებით არის სტანდარტული მცირე მოცულობის მონაცემებისთვის და პირდაპირი გადასვლის დროს.