Maisto bankas
PI;N
(angl. TL;DR
)
Valgių apskaitos programėlė "Maisto bankas": subalansuota "Maisto banko" savanoriams, bet tinka ir "Maltiečių ordino" virtuvių šefams bei kebabinių gaspadinėms!
Programėlė "Maisto bankas" yra licencijuota pagal "Apache License" sąlygas, vadinasi, programinę įrangą galima laisvai:
- Naudoti bet kokiu tikslu.
- Modifikuoti.
- Platinti (tiek originalią, tiek modifikuotą versijas). Vienintelė ribojanti sąlyga - privaloma išsaugoti autorines teises ir atsišaukimą (jei toks yra) bei nereikalauti jokių autorinių honorarų.
Projekto techniniai niuansai
Šiame dokumente galite susipažinti, kaip vyksta programėlės tobulinimas, apauginant ją nauju funkcionalumu ir koreguojant ar atsisakant senesnio, nebeatitinkančio vartotojų poreikių (arba bankrutavus kokiam nors API teikėjui).
Idėjų semtasi iš kyborgų korifėjaus Viliaus Kraujučio 2014 m. vasarį "Vinted" patalpose vestų "Android" mokymų, kurių metu buvo šnekučiuojamasi programuotojams skirtoje tarnyboje "Gitter".
Programavimo aplinkos įdiegimas
Jei norite prisidėti, tobulinant aplikaciją, turite lokaliai įsidiegti:
- Naujausią oficialią integruotą "Android" programavimo aplinką "Android Studio".
- Projekto buildinimo automatizavimo įrankį "Gradle" (v2.2.1).
- Programavimui "Java" kalba skirtą priemonę "Java SE Development Kit 8".
"Android" programėlės generavimas
Pasinaudojus "Android Studio" vedliu, iš "GitHub" kodo versijavimo sistemos galima parsiųsti programėlės struktūrą:
VCS --> Checkout from Version Control... --> GitHub.
Atsidariusiame lange į "Vcs Version URL" laukelį įveskite:
https://github.com/apuokenas/MaistoBankas.git
,
o kaip "Parent Directory" nurodykite vietinį aplanką, kuriame talpinsite projekto failus.
P. S. Savo mašinoje reikia turėti git.exe bylą, kurios adresas įvedamas per "Settings" meniu:
File --> Settings --> Version Control --> Git.
Lauke "Path to Git executable" nurodomas kelias iki minėto failo. Pvz., jei esate "Windows" vartotojas:
C:\Users[Vartotojas]\AppData\Local\GitHub\PortableGit_[40_raidžių_ir_skaičių]\bin\git.exe.
Kodo modifikacijas ir susijusius komentarus galite peržiūrėti "GitHub" pakeitimų įrašuose.
Layout
komponentai pagrindiniame fragment
'e
- Mygtukas "Nustatymai", atidarantis produktų rinkimo (parduotuvės) arba valgių gaminimo vietos informacijos suvedimo
fragment
'ą. - Mygtukas "Skenuoti".
- Sąrašas (
ListView
) nuskenuotų prekių išvedimui į ekraną.
fragment
'o pridėjimas
"Nustatymų" Tai paprasta forma, kurioje randami keli įvesties laukeliai:
- Miestas
- Parduotuvės adresas
- Parduotuvės pavadinimas
- Savanorio vardas
Ir, žinoma, mygelis "Išsaugoti".
Brūkšninio kodo skenerio implementavimas
Brūkšninius kodus skenuoja kita į "Maisto banką" integruota programėlė - "ZXing" (dar žinoma kaip "Zebra Crossing").
Skenavimas vykdomas, naudojantis Intent
'u.
Instrukcijas, kaip visa tai integruoti, galite rasti čia.
Activity
gyvavimo ciklo registravimas
Siekdamas geriau suprasti Activity
ir Fragment
gyvavimo ciklus (angl. lifecycle), peržiūrėjau atitinkamą diagramą, kuria remiantis, įdėjau Log.d()
komandas į BaseActivity
šiuose metoduose:
- OnCreate()
- OnStart()
- OnResume()
- OnPause()
- OnStop()
- OnDestroy()
Fragment
'ų gyvavimo ciklo registravimas
Analogiškai Activity
gyvavimo ciklo loginimo atvejui, pasidariau Fragment
gyvavimo ciklo registravimą.
Apie Fragment
gyvavimo ciklus galima pasiskaityti oficialioje "Google" dokumentacijoje
Taigi reikia susikurti BaseFragment
pagrindinę klasę, kurioje patalpinti loginimo metodai:
- onAttach()
- onCreate()
- onCreateView()
- onActivityCreated()
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
Duomenų bazės, skirtos saugoti brūkšninius kodus, integravimas
Funkcionalumas įgyvendintas, pasitelkus "ORM Lite".
Duomenų modelio kūrimas
Saugotina informacija
Prekė Item
:
-
barcode
- prekės brūkšninis kodas -
name
- prekės pavadinimas -
price
- prekės kaina -
weight
- prekės svoris (bnors fizikiškai tiksliau būtų vadint mase) -
image_url
- prekės nuotrauka
Nuskenuota prekė ScannedItem
:
-
id
- unikalus konkretų skenavimą identifikuojantis numeris -
barcode
- prekės brūkšninis kodas -
time
- skenavimo laikas -
place
- skenavimo vieta -
volunteer
- savanoris (taip pat gali būti virtuvės šefas ar namų šeimininkė, priklausomai nuo aplinkybių, kuriomis naudojama aplikacija)
Naujai skenuojamų produktų išsaugojimas duomenų bazėje
Sukuriamas ir duomenų bazėn patalpinamas naujas ScannedItem
objektas.
Apie tai, kaip susikurti "ORM Lite" duomenų bazės Helper
klasę, galima sužinoti iš šių šaltinių:
- ORM naudojimas kartu su "Android" operacine sistema
- ORM taikymo "Android'e" pavyzdžiai
- Konkretus taikomasis pavyzdys "GitHub'e"
Pasinaudojant Helper
klase, įrašas išsaugomas duomenų bazėje.
Irašų, išsaugotų duomenų bazėje, rodymas
Atvaizduojamas nuskenuotų prekių sąrašas vis atnaujinamas naujais įrašais iš duomenų bazės
-
MainFragment
'eonResume
metode iškviečiamadbHelper.getScannedItemDao().queryForAll()
funkcija. - Sąrašas bus atvaizduotas, sukūrus naują adapterį.
- Sąrašo eilutės vaizduojamos sukurtame
layout
'e (kol kas - tik suTextView
, skirtu ekranan išvesti brūkšninį kodą).
Nuskenuotos prekės informacijos rodymas
- Duomenys apie maisto produktą gaunami ir atitinkamas duomenų modelis sukuriamas, naudojant REST klientą "Retrofit".
- Prekės informacijos talpinimas duomenų bazėje.
- Prekės informacijos pavaizdavimas sąraše.
- Prekės paveiksliukas rodomas, pasitelkus paveikslėlių siuntimo ir kešavimo (talpinimo į podėlį) biblioteką "Picasso".
- Rodoma papildoma prekės informacija.
-
Nustatymai
mygtukas įtrauktas į meniu. -
Skenuoti
mygtukas centruojamas apačioje. - Naujausi nuskenuoti įrašai rodomi viršuje.
- Skenavimo mygtukas yra animuotas.
Ne pagal "Material Design" principus sukurtos vartotojo sąsajos pavyzdys: