Komunikacija između aktivnosti i usluge. Prijenos podataka između aktivnosti

Zadnja izmjena: 03.04.2018

Objekt Intent koristi se za prijenos podataka između dvije aktivnosti. Putem metode putExtra() možete dodati ključ i njegovu pridruženu vrijednost.

Na primjer, prosljeđivanje iz trenutne aktivnosti u SecondActivity niza "Hello World" s ključem "hello":

// kreiraj namjeru za pokretanje SecondActivity Intent intent = nova namjera(this, SecondActivity.class); // prosljeđivanje objekta s ključem "hello" i vrijednošću "Hello World" namjerom putExtra("hello", "Hello World"); // pokretanje SecondActivity startActivity(namjera);

Za prijenos podataka koristi se metoda putExtra() koja vam omogućuje prijenos podataka najjednostavnijih tipova - String, int, float, double, long, short, byte, char, nizova ovih tipova ili objekta Serializable. sučelje kao vrijednost.

Za dobivanje poslanih podataka kada se SecondActivity učita, možete koristiti metodu get(), kojoj se prosljeđuje ključ objekta:

Argumenti paketa = getIntent().getExtras(); Naziv niza = arguments.get("hello").toString(); // Pozdrav svijete

Ovisno o vrsti podataka koji se šalju, možemo koristiti brojne metode na objektu Bundle kada ga primimo. Svi oni uzimaju ključ objekta kao parametar. Glavni su:

    get() : generička metoda koja vraća vrijednost tipa Object. U skladu s tim, polje primanja, ova vrijednost mora se pretvoriti u željenu vrstu

    getString() : vraća objekt tipa String

    getInt() : vraća int vrijednost

    getByte() : vraća vrijednost bajta

    getChar() : vraća vrijednost tipa char

    getShort() : vraća vrijednost tipa short

    getLong() : vraća dugu vrijednost

    getFloat() : vraća vrijednost float

    getDouble() : vraća dvostruku vrijednost

    getBoolean() : vraća Booleovu vrijednost

    getCharArray() : vraća niz char objekata

    getIntArray() : vraća niz int objekata

    getFloatArray() : vraća niz float objekata

    getSerializable() : vraća objekt Serializable sučelja

Neka u našem projektu budu definirane dvije aktivnosti: MainActivity i SecondActivity.

U SecondActivity kodu definirajmo primanje podataka:

Paket com.example.eugene.serializeapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; javna klasa SecondActivity proširuje AppCompatActivity ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setTextSize(20); textView.setPadding(16, 16, 16, 16 ); Bundle arguments = getIntent().getExtras(); if(arguments!=null)( String name = arguments.get("name").toString(); String company = arguments.getString("company"); int cijena = arguments.getInt("cijena"); textView.setText("Naziv: " + naziv + "\nTvrtka: " + tvrtka + "\nCijena: " + cijena); ) setContentView(textView); ) )

U ovom slučaju, u SecondActivity dobivamo sve podatke iz Bundle objekta i prikazujemo ih u tekstualnom polju TextView. Pretpostavlja se da će ovoj aktivnosti biti proslijeđena tri elementa - dva niza s ključevima naziv i tvrtka te broj s ključem cijene.

Sada definirajmo prijenos podataka u SecondActivity. Na primjer, definirajmo sljedeće sučelje za MainActivity u datoteci activity_main.xml: