Kuinka käyttää LiveData-sovellusta valtakunnan kanssa

Jos olet Android-kehittäjä ja et ole asunut kiven alla Google IO: n17 jälkeen, olet epäilemättä nähnyt paljon jännitystä ja lukuisia blogin kirjoituksia Android-arkkitehtuurikomponenteista.

Näiden uusien komponenttien (ViewModel, Lifecycle, LiveData ja Room) tehosta ja hyödyllisyydestä on todellakin paljon innoissaan.

Live-datavirrat

Mielestäni LiveData on mielenkiintoisin osa kokoonpanoa. On mahtavaa nähdä, että Google kattaa nyt reaaliaikaisen, automaattisen päivityksen tietojen käsitteen. On yhtä mahtavaa nähdä, kuinka he ovat integroineet LiveData -sovelluksen suoraan uuteen SQLite ORM: ään (huone).

Tämän ansiosta LiveDatan teho on helppo nähdä heti, mutta rakastan LiveData-suunnittelussa eniten, että Google on tehnyt siitä geneerisen ja avoimen kehittäjille käyttämään LiveData-sovellusta moniin muihin käyttötapoihin, kuten:

  • Verkon valtionhallinta ja tietoisuus
  • Palautetaan LiveData w / Retrofit
  • Sovellustilan hallinta

Valtakunta + LiveData

LiveData-sovelluksen joustavuus mahdollistaa sen integroinnin myös muihin kolmannen osapuolen kirjastoihin! Realmin insinöörinä tämä on erittäin mielenkiintoista minulle, koska se tarkoittaa, että voin kääriä RealmResults LiveData-tiedoksi ja käyttää sitä kuten mitä tahansa muuta LiveData-kappaletta.

Tällä on ainakin kaksi lisäetua.

Kehittäjien on entistä helpompaa reagoida tiedonmuutoksiin, koska heidän ei enää tarvitse rekisteröidä muutoslisteneriä RealmResults-ohjelmaan toiminnassaan onStart () -menetelmässä ja peruuttaa se onStop () -rekisterissä. Pikemminkin tämä voi tapahtua automaattisesti Realm-LiveDatan kanssa, kun omistava aktiviteetti alkaa ja lopettaa sen havaitsemisen.

Toinen etu on, että sen avulla RealmResults voi osallistua LiveData-muunnoksiin. Transformaatiot ovat hienoja, koska niiden avulla voit muuntaa minkä tahansa LiveData-asiakirjan jostakin hyvin spesifisestä, kuten LiveData , arkistosi tai ViewModel-kerroksessa, jotain täysin taustalla olevan lähteen agnostiikkaan, kuten LiveData aktiivisuuskerroksessa. Saat tämän luopumatta Realmin automaattisesta päivityksestä. Tämä pitää sovelluksesi eri tasot eristettynä, mikä helpottaa niiden luomista, päivittämistä ja testaamista.

Päästä alkuun

Katso täydellinen ohje- ja näyteprojekti siitä, miten arkkitehtuurikomponentit voidaan integroida maailmaan, tutustu tähän muuhun kirjoittamaani viestiin, mutta tämän nopean esimerkin pitäisi antaa sinulle yleinen idea aloittamiseen.

1. Luo LiveData-kääre RealmResults-sovellukseesi.

// Tämä toimii kaikkien projektissa olevien RealmModel-tulosten kanssa
julkisen luokan RealmLiveData  laajentaa LiveData > {
yksityiset RealmResults  -tulokset;
    yksityinen lopullinen RealmChangeListener > listener =
        uusi RealmChangeListener > () {
            @Ohittaa
            public void onChange (RealmResults  tulokset) {
                SetValue (tulokset);
            }
    };
    julkinen RealmLiveData (RealmResults  realmResults) {
        tulokset = realmResults;
    }
    @Ohittaa
    suojattu tyhjä onActive () {
        results.addChangeListener (kuuntelija);
    }
    @Ohittaa
    suojattu tyhjä onInactive () {
        results.removeChangeListener (kuuntelija);
    }
}

2. Käytä tätä kääntääksesi RealmResults-paljastetut tiedot Realm Dao- tai Repository-kerroksesta.

julkinen RealmLiveData  findLoansByNameAfter (merkkijonon käyttäjänimi, päivämäärä jälkeen) {
    palaa asLiveData (realm.where (Loan.class)
            .like ("käyttäjän.nimi", käyttäjänimi)
            .greaterThan ("endTime", jälkeen)
            .findAllAsync ());
    // Async ajaa nouton pääkierrosta ja palaa
    // tulokset LiveData-muodossa takaisin päälle.
}

3. Käytä lopuksi sitä kuten mitä tahansa muuta ViewModel-sovelluksen LiveData-tapaa, kartoittamalla se jotain yleisempää Activity-tasollesi ja tilaa se aktiviteetistasi.

// ViewModel
julkisen luokan LoanViewModel laajentaa ViewModelia {
    yksityinen valtakunta;
    
    julkiset LiveData  -lainat;
    // LiveData  -tilaus tilataan
    yksityinen mitätön tilausToMikesLoansSinceEilen () {
        RealmLiveData  lainat = lainaDao (valtakunta)
                 .findLoansByNameAfter ("Mike", getYesterdayDate ());
        lainat = Transformations.map (lainat, uusi toiminto () {...});
    }
    ...
}
// Aktiviteetti
public class LoanActivity laajentaa LifecycleActivity {
  
    suojattu tyhjä onCreate (Bundle savedInstanceState) {
        ...
        viewModel.loans.observe (tämä, uusi tarkkailija  () {
            public void onChanged (merkkijono tulos) {
                updateUI (tulos)
            }
        });
       ...
    }
   ...
}

4. (Valinnainen) Sadetaan hiukan Kotliniin ja näyttää siltä, ​​että Android-arkkitehtuurikomponentit ovat olleet siellä koko ajan!

// Käytä nimellä
// realm.loanDao () Kotlinissa
// LainaDao (valtakunta) Java
hauska Realm.loanDao (): LoanDao = LoanDao (tämä)
// Käytä nimellä
// realmResults.asLiveData () Kotlinissa
// uusi RealmLiveData (valtakunta) Java-tilassa
hauskaa  RealmResults  .asLiveData () = RealmLiveData  (tämä)

Arkkitehtuurikomponenttien vaikutus

Tämä tarkoittaa kehittäjille, jotka rakastavat Realm-sovellusta sen yksinkertaisen sovellusliittymän, monipuolisen ilmoitusjärjestelmän ja reaaliaikaisen tietojen synkronoinnin välillä laitteisiin, on se, että kaikki Android-arkkitehtuurikomponenttien, ViewModelsin, Lifecyclein, LiveDatan ja jopa kapseloitujen tietojen käyttöoikeudet DAO: n kautta ovat saatavilla. luopumatta ominaisuuksista, joita he ovat rakastaneet!