Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Android SDK
Code

Skep Swaar Tracker Aansoek Met Wolk Firestore

by
Difficulty:IntermediateLength:LongLanguages:

Afrikaans (Afrikaans) translation by Aisyah Arrafah (you can also view the original English article)

Om jou program se data in die wolk te stoor, is tans van groot belang omdat gebruikers geneig is om verskeie toestelle te besit en wil hê dat hul programme in al hulle gesinkroniseer word. Met Cloud Firestore, 'n real-time NoSQL databasis beskikbaar op die Firebase platform, is dit makliker en veiliger as ooit tevore.

In 'n vorige handleiding, het ek jou bekend gemaak met al die kragtige funksies wat Cloud Firestore bied. Vandag sal ek jou wys hoe om dit saam met ander Firebase-produkte, soos FirebaseUI Auth en Firebase Analytics, te gebruik om 'n eenvoudige, maar hoogs skaalbare, gewig-tracker-program te skep.

Voorvereistes

Om hierdie stap-vir-stap handleiding te volg, moet jou:

  • die nuutste weergawe van Android Studio
  • 'n Firebase rekening
  • en 'n toestel of emulator wat Android 5.0 of hoër bestuur

1. Projekop Stelling

Om van Firebase-produkte in jou Android Studio-projek gebruik te maak, sal ouy die Google Services Gradle invoegtoepassing, 'n Firebase-konfigurasielêer en 'n paar implementering safhanklikhede benodig. Met die Firebase Assistant kan ouy hulle almal baie maklik kry.

Open die assistent deur na Tools> Firebase te gaan. Kies, dan die Analytics opsie en klik op die skakel 'n Analytics gebeurtenis skakel.

Fierbase Assistant panel

Jou kan nou die Connect to Firebase knoppie druk om u Android Studio projek aan te sluit by 'n nuwe Firebase projek.

Connect to Firebase dialog

Om eintlik plugins te voeg en implementering afhanklikhede, moet jou ook die knoppie druk Add Analytics to your app knoppie.

Die swaar tracker program wat ons nou skep, sal net twee kenmerke hê: spaar gewigte en vertoon hulle as gesorteerde lyste in omgekeerde chronologiese volgorde. Ons sal natuurlik Firestore gebruik om gewigte te stoor. Om dit as 'n lys te vertoon, sal ons die verwante komponente van Firestore beskikbaar by FirebaseUI Biblioteek. Voeg dan die volgende by implementation  afhanklikheid van app module build.gradle lêer,

Gebruikers moet net hul eie gewigte kan sien, nie die gewigte van almal wat die program gebruik nie. Daarom moet ons program die vermoë hê om sy gebruikers uniek te identifiseer. FirebaseUI Auth bied hierdie vermoë, dus voeg die volgende afhanklikheid by:

Ons sal ook 'n paar Materiaalontwerp-widgets benodig om ons program 'n aangename voorkoms te gee. Maak dus seker dat jou die Ontwerp en Ondersteuningsbiblioteke byvoeg Material Dialogs biblioteek as 'n afhanklikheid.

Ten slotte, druk die Sync Now knoppie om die projek by te werk.

2. Konfigurasie van Firebase Verifikasie

Firebase verifikasie ondersteun 'n verskeidenheid identiteitsverskaffers. Maar almal is standaard afgeskakel. Om een ​​of meer van hulle te aktiveer, moet jou die Firebase console besoek.

Di konsol, pilih proyek Firebase yang Anda buat di langkah sebelumnya, buka Authentication afdeling, en druk Set up sign-in method knoppie. 

Firebase Authentication home screen

Om gebruikers toe te laat om aan te meld by ons program met 'n Google rekening, aktiveer Google as 'n verskaffer, gee 'n betekenisvolle publieke naam na die projek en druk die Stoor knoppie.

Google identity provider configuration

Google is die maklikste identiteitsverskaffer wat jy kan gebruik. Geen konfigurasie benodig nie, en jou Android Studio projek vereis nie addisionele afhanklikhede daarvoor nie.

3. Wolk Firestore Instel

Jy moet Firestore in die Firebase-konsole aktiveer voordat jy dit begin gebruik. Om dit te doen, maak dit oop Database afdeling en druk die Get Started  knoppies teenwoordig by die Cloud Firestore Beta card.

Cloud Firestore card

U sal nou gevra word om die sekuriteitsmodus vir die databasis te kies. Maak seker dat jou kies Start in locked mode opsies en druk Enable knoppie.

Security mode selection screen

In die geslote modus sal niemand die inhoud van die databasis toegang hê of verander nie. Daarom moet jou nou 'n veiligheidsreël skep waarmee gebruikers net die dokumente wat aan hulle behoort, kan lees en skryf. Begin deur te begin Rules tab.

Voordat ons 'n beveiligingsreël vir ons databasis skep, moet ons oplos hoe ons data daarin sal stoor. So kom ons sê ons sal 'n topvlakversameling hê wat genoem word users bevat dokumente wat ons gebruikers verteenwoordig. Die dokumente kan unieke ID's hê wat identies is aan die ID's wat die Firebase Authentication diens vir die gebruikers genereer.

Omdat die gebruikers verskeie gewiginskrywings by hul dokumente sal voeg, is die gebruik van 'n subversameling om daardie inskrywings te stoor ideaal. Kom ons noem die sub-insamelge weights.

Firestore database structure

Op grond van bogenoemde skema kan ons nou 'n reël vir die padgebruikers users/{user_id}/weights/{weight} skep. Die reël sal wees dat 'n gebruiker slegs kan lees en skryf na die pad as die {user_id} veranderlike gelyk is aan die Firebase Authentication ID van die gebruiker.

Gevolglik, werk die inhoud van die reëls-redakteur op.

Laastens, druk die Publish knoppie om die reël te aktiveer.

4. Verifikasie van Gebruikers

Ons program moet slegs bruikbaar wees as die gebruiker daarby ingeskryf is deur 'n Google rekening te gebruik. Daarom moet dit sodra dit oopgemaak word, seker maak of die gebruiker 'n geldige Firebase Authentication ID het. As die gebruiker die ID het, moet dit voortgaan en die gebruikerskoppelvlak lewer. Andersins moet dit 'n aanmeldskerm vertoon.

Om seker te maak of die gebruiker 'n ID het, kan ons eenvoudig seker maak dat die huidigeUser eiendom van die FirebaseAuth-klas nie nul is nie. As dit nul is, kan ons 'n aanmelding-intensie skep deur die metode CreateSignInIntentBuilder() van die AuthUI klas te noem.

Die volgende kode wys jou hoe om dit vir Google as die identiteitsverskaffer te doen:

Let daarop dat ons 'n metode genaamd showUI() noem as 'n geldige ID reeds teenwoordig is. Hierdie metode bestaan ​​nog nie, so skep dit en laat sy liggaam nou leeg.

Om die resultaat van die inskrywing voorneme te vang, moet ons die onActivityResult() metode van die aktiwiteit ignoreer. Binne die metode, as die waarde van die resultKode argument RESULT_OK is en die huidigeUser eienskap nie meer nul is nie, beteken dit dat die gebruiker suksesvol kon aanmeld. In hierdie geval moet ons weer die showUI() metode skakel om die gebruikerskoppelvlak te lewer.

As die gebruiker nie inskakel nie, kan ons 'n roosterbrood vertoon en die program sluit deur die finish() metode te skakel.

Gevolglik, voeg die volgende kode by die aktiwiteit:

Op hierdie stadium, as jou die program vir die eerste keer uitvoer, moet jou 'n aanmeldskerm sien wat soos volg lyk:

Account selection dialog

In die volgende proses - danksy Google Smart Lock, wat standaard is aangeskakel - sal jou outomaties aangemeld word.

5. Definieer Uitleg

Ons program benodig twee uitlegte: een vir die hoofaktiwiteit en een vir die gewiginskrywings wat as items van die omgekeerde chronologies geordende lys vertoon sal word.

Tata letak aktivitas utama harus memiliki RecyclerView widget, yang akan bertindak sebagai daftar, dan a FloatingActionButton widget,  waar gebruikers kan druk om nuwe geweegde inskrywings te skep. Nadat hulle albei binne was RelativeLayout widget, Die XMLl êer van jou aktiwiteit uitleg moet so lyk:

Ons het 'n kliek-gebeurtenis hanteerder wat die naam addWeight() genoem het, gekoppel aan die FloatingActionButton widget. Die hanteerder bestaan ​​nog nie, so skep 'n stomp daarvoor binne die aktiwiteit.

Om die uitleg van die gewiginskrywing eenvoudig te hou, sal ons net twee TextView widgets daarin hê: een om die gewig te vertoon en die ander om die tyd te wys waarop die item geskep is. Die gebruik van 'n LinearLayout widget as 'n houer vir hulle sal voldoende wees.

Dus, skep  'n nuwe naam uitleg XML lêer weight_entry.xml en voeg die volgende kode by:

6. Skep van 'n Model

In die vorige stap het jy gesien dat elke gewiginskrywing 'n gewig en tyd daaraan verbonde het. Om Firestore hieroor te laat weet, moet ons 'n model vir die gewiginskrywing skep.

Firestore-modelle is gewoonlik eenvoudige dataklasse met die vereiste lidveranderlikes.

Nou is dit ook 'n goeie tyd om 'n ooghouer vir elke gewiginskrywing te skep. Die vertoninghouer, soos u moontlik raai, sal deur die RecyclerView widget gebruik word om die lysitems te lewer. Skep dus 'n nuwe klas genaamd WeightEntryVH, wat die RecyclerView.ViewHolder klas uitbrei en lid veranderlikes vir beide die TextView widgets skep. Moenie vergeet om hulle te initialiseer met behulp van die findViewById() metode. Die volgende kode wys jou hoe om bondig te doen:

7. Skep Unieke Gebruikers Dokumente

Wanneer 'n gebruiker probeer om 'n geweegde inskrywing vir die eerste keer te skep, moet ons program 'n afsonderlike dokument vir binne gebruikers maak users versameling by Firestore. Soos ons vroeër besluit het, sal die dokument ID niks anders wees as die gebruiker se Firebase Authentication ID, wat verkry kan word deur gebruik te maak van uid eiendom van currentUser voorwerpe.

Om 'n verwysing na te kry users versameling, ons moet die versameling() metode gebruik van klas FirebaseFirestore. Ons kan dit noem  motode document() en deur die uid as 'n argument om 'n gebruikersdokument te skep.

Ons benodig toegang tot gebruikerspesifieke dokumente, sowel as die lees van gewigte inskrywings. Om te verhoed dat jou twee keer die bogenoemde logika koder, stel ek voor dat jou 'n aparte metode daarvoor maak.

Let daarop dat dokumente slegs een keer per gebruiker geskep word. Met ander woorde, sommige oproepe na bogenoemde metode sal altyd dieselfde dokument terugbesorg, solank die gebruiker dieselfde Google rekening gebruik.

8. Toevoeging van Swaar Inskrywings

Wanneer 'n gebruiker 'n drywende aksieknoppie uit ons program druk, moet hulle 'n nuwe geweegde inskrywing kan skep. Om hulle toe te laat om hul gewigte in te tik, laat ons nou 'n dialoog skep met 'n EditTex widget. Met die Materiaal Dialog biblioteek, dit is baie intuïtief.

In die addWeight() metode, wat as 'n gebeurtenishandler op die knoppie funksioneer, skep a MaterialDialog.Builder voorbeeld en noem hom  title() en content() Metodes om jou dialoog 'n betekenisvolle titel en boodskap te gee. Net so, bel inputType() metodes en slaags TYPE_CLASS_NUMBER as 'n argument om te verseker dat die gebruiker slegs nommers in die dialoog kan tik.

Volgende, skakel die inset() metode om 'n wenk te gee en assosieer 'n gebeurtenishandler met die dialoog. Die hanteerder sal die gewig ontvang wat die gebruiker ingevoer het as 'n argument.

Ten slotte, maak seker dat jou die metode show() skakel om die dialoog te vertoon.

Binne die geleentheidshandler moet ons nou kode byvoeg om eintlik die nuwe swaarinskrywingsdokumente te skep en te vul. Omdat die dokument moet behoort die weights 'n unieke versameling gebruikersdokumente, om toegang tot die versameling te verkry, moet u die versamelmetode() van die dokument wat deur die getUserDocument()  metode teruggekeer word, bel.

Sodra jou die versameling het, kan jou sy add() metode noem en 'n nuwe instansie van die WeightEntry klas daaroor slaag om die inskrywing op te slaan.

In die bostaande kode kan jou sien dat ons gebruik time eiendom van Date klas om die tydstempel met die inskrywing te assosieer.

As jou nou die program hardloop, moet jou nuwe gewiginskrywings by Firestore kan voeg. jou sal hulle nog nie in die program sien nie, maar hulle sal sigbaar wees in die Firebase konsole.

Add weight dialog

9. Wys die Gewiginskrywings

Dit is nou tyd om die RecyclerView widget van ons uitleg te vul. Begin dus deur 'n verwysing daarvoor te maak deur die metode FindViewById() te gebruik en 'n nuwe instansie van die LinearLayoutManager klas daaraan toe te ken. Dit moet gedoen word binne die showUI() metode wat ons vroeër geskep het.

The RecyclerView widget moet alle dokumente binne vertoon weights gebruikersdokument. Verder moet die nuutste dokumente eerste verskyn. Om aan hierdie vereistes te voldoen, moet ons nou 'n navraag skep deur die versameling() en orderBy() metodes te noem.

Ter wille van doeltreffendheid kan jou die aantal waardes wat deur die navraag teruggestuur is, beperk deur die limiet() metode te noem.

Die volgende kode skep 'n navraag wat die laaste 90 gewiginskrywings wat deur die gebruiker geskep is, weergee:

Met die navraag moet ons nou 'n FirestoreRecyclerOptions voorwerp skep, wat ons later sal gebruik om die adapter van ons RecyclerView widget te konfigureer. As jou die navraag instansie na die setQuery() metode van sy bouer slaag, maak seker dat jy spesifiseer dat die resultate wat in die vorm van WeightEntry voorwerpe is, gegee word. Die volgende kode wys jou hoe om dit te doen:

jou het dalk opgemerk dat ons ons huidige aktiwiteit die lewensiklusseienaar van die FirestoreRecyclerOptions voorwerp maak. Dit is belangrik omdat ons wil hê ons adapter moet toepaslik reageer op algemene lewensiklusgebeurtenisse, soos die gebruiker wat die program oopmaak of sluit.

Op hierdie stadium kan ons 'n FirestoreRecyclerAdapter voorwerp skep, wat die FirestoreRecyclerOptions-voorwerp gebruik om self te konfigureer. Omdat die FirestoreRecyclerAdapter-klas abstrak is, moet Android Studio sy metodes outomaties ignoreer om kode op te stel wat soos volg lyk:

Soos jou kan sien, is die FirestoreRecyclerAdapter klas baie soortgelyk aan die RecyclerView.Adapter klas. Trouens, dit is afgelei daarvan. Dit beteken dat jou dit op dieselfde manier kan gebruik as jou die RecyclerView.Adapter klas gebruik.

In die metode OnCreateViewHolder(), moet jou die weight_entry.xml uitleglêer uitbrei en die WeightEntryVH  vouer objek op grond daarvan weergee.

En in die onBindViewHolder() metode, moet jou model argumente gebruik om die inhoud van die TextView widget in die vertoonhouer by te werk.

Wanneer u die WeightView widget opdater, is dit maklik om die TimeView widget op te dateer. Dit is 'n bietjie lastig omdat ons nie 'n tydstempel, wat binne millisekondes is, direk aan die gebruiker wil vertoon nie.

Die maklikste manier om tydstempel te omskep tot op datum en tyd om te lees, is om die formatDateTime() metode van die DateUtils klas te gebruik. Benewens tydstempels, kan die metode verskeie verskillende vlae aanvaar, wat gebruik sal word om die datum en tyd te formateer. jou kan vlae gebruik wat ooreenstem met jou voorkeure.

Ten slotte, vergeet nie om die RecyclerView widget na die adapter wat ons net geskep het, te herlei nie.

Die aansoek is gereed. Jou behoort nou nuwe plasings te kan byvoeg en dit onmiddellik in die lys te sien. As jou die program op 'n ander toestel met dieselfde Google rekening hardloop, sal jou sien dat dieselfde gewiginskrywing ook op dit verskyn.

Weight entries shown as a list

Gevolgtrekking

In hierdie handleiding sien jou hoe vinnig en maklik dit is om 'n ten volle funksionele swaaropspoorprogram vir Android te skep wat Cloud Firestore as die databasis gebruik. Voel vry om meer funksionaliteit daaraan te voeg! Ek stel ook voor dat jou dit op Google Play publiseer. Met Firebase Spark planne, wat tans 1 GB gratis data stoor bied, sal jou geen probleem hê om ten minste 'n paar duisend gebruikers te bedien nie.

En as jou hier is, kyk gerus na ons ander plasings oor Android-appontwikkeling!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.