Diskuze: výukový plán pro vývoj android aplikace
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Jestli začínáš úplně od začátku, chápu tvou frustraci. Směr výuky
máš správný. OOP jsou základními stavebními kameny, jinak se v trošku
větším projektu ztratíš v opakujícím kodu.
SQL je důležitý pro to abys dokázal komunikovat s databází. Pro tuto
aplikaci ti bude bohatě stačit dotaz pro vytvoření tabulky, vložení
záznamu a nalezení záznamu.
Možná by ti ještě mohla pomoci tato knížka: Vývoj aplikací pro
Android
Kde jsou vysvětleny layouty i s xml kody, základní aktivity a další. Vezmi
v potaz že je to už 6 let stará knížka a ne všechny postupy jsou
aktuální (tuším je napsaná pro Android 5).
Ta databáze mi v tomto případě připadá že to je spíš kanón na
vrabce. Jestli to dobře chápu, tak ten seznam chybových hlášení je předem
daný a prakticky neměnný (myšleno, že uživatel tam asi nebude doplňovat
nové), takže to spíš zní jako případ pro prostý resources soubor, třeba
ve formátu json, odkud by se ta data tahala. Odpadla by ti tak nutnost se
zabývat sql a vším tím okolo
Díky za radu, už řeším, jak se ke knize nejrychleji dostat.
Ano, seznam budu jen průběžně doplňovat já, jako vývojář, o další způsoby řešení.
Zaujal mě tvůj návrh ukládal text do souboru formátu json.
Včera jsem se snažil přidat knihovnu json.simple.jar do NetBeans, ale nedaří se mi to zprovoznit. Vždy při importu json mi program píše že nemůže najít json balíček. Nemáš tip na nějaký tutoriál jak, json rozběhnout v NetBeans, nebo Android Studiu? Asi to je jedna ze základních dovedností, ale jsem začátečník a na něčem se to naučit musím.
Nepotřebuješ žádnou externí knihovnu, Android SDK už má podporu jsonu v sobě. Stačí načíst json soubor jako text do Stringu, ze Stringu udělat JSONObject a pak už to parsuješ podle struktury toho jsonu. Pěkný příklad je třeba zde
Ještě se zaptám, můžu pro tento učel použít i formát xml, na který tu je návod?
Jistě, ale vem v úvahu že ten soubor budeš psát a xml formát je výrazně 'ukecanější' než json...
Jasně, projedu si tutoriál xml, abych věděl jak funguje práce se soubory
v javě a pak uvidím, který formát využiju. Díky za pomoc!
Konečně jsem se naučil trochu používat JSON. Umím vytvořit a načíst
objekt. Ale nejde mi do hlavy, jak teď vytvořím jednotlivé chyby, abych v
nich pak mohl v aplikaci hledat. Dejme tomu že budu mít dvě chyby, co mi
může zahlásit robot.
1)
id: E1550
zprava: bezpečnostní držák odpojen.
řešení: nasadit bezpecnostni držák.
2)
id: E 1580
zpráva: chyba svařovacího oblouku.
řešení: zkontrolovat přídavný materiál.
Uživatel na začátku zadá číslo chyby, tedy id.
Měl bych mít tyto chyby uloženy, jako objekty v jednom json souboru?
Pokud ano, jak mezi nimi hledat? Když si je uložím do json tak se proměnné
opakují, ale jména instancí tam napsané nejsou.
Nebo si mám vytvořit json soubory které budou mít jako název id chyby a vypisovat celé soubory?
Snad můj dotaz dává smysl, už nějakou dobu hledám všude na internetu, ale pokaždé je vidět jen výpis celého json souboru, nebo jednotlivých proměnných.
Tak předpokládejme že máš třídu Chyba
a v ní
Stringy
pro id
, zpravu
a
reseni
. Pak bych udělal ten json soubor ve kterém by bylo json
pole pojmenované chyby
nějak takto:
{
"chyby": [
{
"id":"E1550",
"zprava":"bezpečnostní držák odpojen",
"reseni":"nasadit bezpečnostní držák"
},
{
"id":"E1580",
"zprava":"chyba svařovacího oblouku",
"reseni":"zkontrolovat přídavný materiál"
}
]
}
no a pak při spuštění aplikace bych to načetl do
JSONObjectu
z něj bych pak do JSONArray vytáhnul pomocí
getJSONArray("chyby") to pole, tohle pole bych pak procházel položku po
položce a pokaždé bych vytvořil novou instanci třídy Chyba
s
patřičným id
, zprava
a reseni
. Každu
tu novou instanci bych si vložil do ArrayListu
ve kterém bych
potom mohl normálně vyhledávat podle toho id.
Myslím že to dělám dost podobně, akorát mám pole pojmenované, jako id chyby a podle toho, pak hledám a vypisuji položky pole.
{
"E1550": [
{
"codeOfError": "E1550",
"message": "bezpečnostní držák odpojen",
"solution": "nasadit bezpečnostní držák"
}
],
"E1580": [
{
"codeOfError": "E1580",
"message": "chyba svařovacího oblouku",
"solution": "zkontrolovat přídavný materiál."
}
]
}
Myslím že jsem si z toho udělal objekty, které mají pole atributů. Může to tak být? Je to sémanticky správně a nebude to dělat v budoucnu problém?
V java aplikaci mi to vyhledává správně a můžu si vybrat, který atribut si nechám vypsat.
To nemáš úplně správně, to co tam máš jsou json objekty z nichž
každý má jako klíč kód chyby a jako hodnotu pole
obsahující pouze jediný objekt. Pole obsahující jenom jeden objekt je
zbytečnost, vyhoď ty hranaté závorky a budeš tak mít prostě objekty
jejichž hodnota je prostý objekt. Taky je celkem zbytečné tam mít to
codeOfError
, tu informaci o tom jaký je kód chyby máš přece v
klíči.
Klidně to můžeš dělat i takto, ale to moje řešení se mi líbí víc
Tak jsem všechno zprovoznil v NetBeans. Fungovalo to skvěle a nastal čas to hodit do Android studia a dělat přímo aplikaci pro android.
S hrůzou jsem zjistil, že můj vydřenej (se vším úsilím napsanej) kód nefunguje. Celou dobu jsem pracoval s json simple, ale v android studiu se pracuje jen s json.
Json nemá JSONParse jako json simple.
Takže jsem skončil hned na začátku a nevím, jak si načíst json soubor. A jak ho dát do stringu.
Odkaz, který si mi přiložil počítá s načtením dat z url a nedokážu domyslet jak podle toho načíst lokální soubor.
Zkoušel jsem hodně tutoriálů z YouTube a tak, ale žádnej mi nenašel soubor, který jsem si vytvořil přímo v projektu ve složce /res.
Například přes JSONBuffer, nebo nějakej mapper. Navíc všechny kódy mi přišly neuvěřitelně složitý, na to, že potřebuju načíst jen soubor přímo z aplikace.
Mohl by si mě prosím navést, jaký nástroj použít, pro načtení jsonu, který je přiložený přímo ve složce v aplikaci?
Ten soubor patří do složky res/raw. Pokud tam nemáš tu složku raw tak
si ji tam vytvoř. Pokud se ten soubor jmenuje chyby.json
tak pak
si v aplikaci vytvoříš InputStream, a tento načteš do připraveného
Stringu pomocí Scanneru:
InputStream is = getResources().openRawResource(R.raw.chyby);
Scanner scanner = new Scanner(is);
String json = "";
while (scanner.hasNext()) {
json += scanner.nextLine();
}
Všimni si toho R.raw.chyby - to odkazuje na ten soubor chyby.json ve složce res/raw. Pokud bys ten soubor měl pojmenovaný třeba data.json tak by to bylo R.raw.data
Po tomhle máš ten json načtený do Stringu json
a můžeš
jej dál zpravovávat pomocí JSONObject tak jak je to v tom tutoriálu co jsem
odkazoval výše. Pokud bys třeba ten json strukturoval tak jak jsem navrhl
výše tak by to zpracování mohlo vypadat takto:
private List<Chyba> listChyb = new ArrayList<>();
... //potom poté co načteš ten json soubor
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("chyby");
for (int i = 0; i < jsonArray.length(); i++) {
String id = jsonArray.getJSONObject(i).getString("id");
String zprava = jsonArray.getJSONObject(i).getString("zprava");
String reseni = jsonArray.getJSONObject(i).getString("reseni");
listChyb.add(new Chyba(id, zprava, reseni));
}
no a máš List s těmi chybami.
Ahoj ak už chceš robiť s JSONom tak treba pogoogliť a budeš ho vedieť namapovať rovno do java objektu a pracovať priamo s tým bez toho že by si ručne musel získavať jednotlivé properties.
Na takéto niečo prečo nevyužiť SQL Lite databázu ktorú Android priamo podporuje. Zatiaľ tam môžeš údaje poslať staticky ale ak bude treba tak sa ti ľahšie dorobí doťahovanie z externého zdroja.
Mal som rozrobený Android projekt tak som ti tu na GitHube https://github.com/…k/wro-helper dal celý funkčný kód,
kde využívam LiveData, Room knižnicu, databinding, fragmenty... Architektúra
Model–view–viewmodel (MVVM) a jazyk Kotlin nakoľko ten Google po novom
podporuje. WROH (welding robot operator helper) tak mi preložil Google
Taktiež som ti to zbuildil a na Google Drive som dal apk aj s videom na ukážku. Apk súbor si môžeš rovno stiahnuť do mobilu a nainštalovať
Pre naplnenie vstupných dát si stiahni sql lite browser https://sqlitebrowser.org/ , otvor v ňom súbor ktorý je v projekte src/main/assets/database/issue.db vlož tam cez inserty dáta v záložke Execute SQL a daj Write Changes. Napr.
INSERT INTO issue(id, message, solution)
VALUES ("ID", "ZPRAVA", "RESENI");
Vymaž dáta aplikácie ak si si ju už spustil v mobile, zbuildi projekt a
spusti aplikáciu. Ak nevieš ako môžeš mi poslať jednotlivé kódy a ja ti
to tam hodím
PS. ak máš dark mode v mobile tak možno ti aj aplikáciu hodí do dark módu ktorý som ale neupravoval tak môže byť horšie viditeľný text.
Ahoj, děkuji za obrovskou snahu pomoct, je vidět, že máš danou
problematiku v malíčku .
Určitě si vše prostuduju a popřemýšlím o nasazení SQL lite do další verze programu. Zatím chci vše zprovoznit s daty v Json, aby se to mohlo začít používat.
Potom chci aplikaci dál rozvíjet o překlady do více jazyků a přidat
průvodce základním školením programování robotů atd., takže si stejně
budu muset celou aplikaci vytvořit sám v Javě.
Zobrazeno 18 zpráv z 18.