Sobes.tech
Junior

Πώς μεταφέρουμε δεδομένα από μια δραστηριότητα σε μια άλλη στο Android;

sobes.tech AI

Απάντηση από AI

Τα δεδομένα μπορούν να μεταδοθούν χρησιμοποιώντας Intent:

  1. Στην αρχική Activity: Τοποθετήστε τα δεδομένα στα Extras του Intent χρησιμοποιώντας μεθόδους όπως putExtra(String key, value).

    // Προετοιμασία του Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Προσθήκη δεδομένων
    intent.putExtra("myString", "Γειά από την πρώτη Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Μπορείτε να μεταδώσετε αντικείμενα που υλοποιούν Parcelable ή Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Εκκίνηση της νέας Activity
    startActivity(intent)
    
  2. Στην Activity προορισμού: Αποκτήστε τα δεδομένα από τα Extras του Intent που λαμβάνεται στη μέθοδο onCreate ή onNewIntent.

    // Στο onCreate() της Activity προορισμού
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Λήψη του Intent που ξεκίνησε αυτήν την Activity
        val intent = intent
    
        // Ανάκτηση δεδομένων με το κλειδί
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Δεύτερος παράμετρος: προεπιλεγμένη τιμή
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Επεξεργασία των εξαγόμενων δεδομένων
        println("Ληφθείσα συμβολοσειρά: $myString")
        println("Ληφθείς αριθμός: $myInt")
        println("Ληφθέν boolean: $myBool")
    
        // Για Parcelable ή Serializable αντικείμενα
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Άλλες μέθοδοι μεταφοράς δεδομένων, κατάλληλες για πιο πολύπλοκα σενάρια ή μεγάλο όγκο δεδομένων:

  • ViewModel κοινόχρηστο μεταξύ Fragments/Activities (μέσω SharedViewModel): Χρησιμοποιείται για κοινά δεδομένα μεταξύ σχετικών συστατικών.
  • Bundle (μέσα στα Extras του Intent): Το putExtra χρησιμοποιεί στην πραγματικότητα ένα εσωτερικό Bundle.
  • Στατικές μεταβλητές/singletons: Πρέπει να χρησιμοποιούνται με προσοχή, μπορούν να οδηγήσουν σε διαρροές μνήμης και προβλήματα κατάστασης.
  • Βάση δεδομένων/SharedPreferences: Για μόνιμη αποθήκευση ή μεταφορά δεδομένων που απαιτούν διατήρηση.
  • Event Bus (π.χ., EventBus, RxJava): Για μεταφορά γεγονότων ή δεδομένων μεταξύ συστατικών με ασύγχρονο τρόπο.
  • File I/O: Αποθήκευση σε αρχείο και ανάγνωση από αυτό.