Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: výukový plán pro vývoj android aplikace

Aktivity
Avatar
Petr Tupec
Člen
Avatar
Petr Tupec:1.12.2021 19:43

Ahoj,
mám v plánu vytvořit android aplikaci, která bude pomáhat začínajícím operátotům svařovacích robotů.
Program by měl obsahovat chybová hlášení a návrh postupu řešení problému.
Operátor vybere kategorii poruchy, opíše chybovou hlášku, nebo její číslo a aplikace by mu měla chybu najít a zobrazit návrh řešení.

Jako programovací jazyk jsem si zvolil Javu a začal jsem se učit základní konstrukci. Tu jsem zdárně dokončil a pokračoval OOP.
V OOP jsem se dostal do sedmé lekce, kde se probírá dědičnost a polymorfismus. Uvědomil jsem si, že to už nemá moc společného s tím co chci napogramovat a navíc se mi dost prodlužovalo pochopení každé další lekce.

Přeskočil jsem na lekci Android programování a doufal, že mi to vžene vítr do plachet a začne mi konečně dávat smysl to, co se učím, vzhledem k mému cíli.
Opak byl pravdou, a navíc mě zamotal hlavu xml kód, se kterým jsem se zatím nikde předtím nesetkal.

Zamyslel jsem se, co by měla moje aplikace dělat. Bude to vlastně databáze ve které bude uživatel hledat to co potřebuje zobrazit. Asi bych funkcionalitu přirovnal ke slovníku. Tak byla mým dalším krokem lekce Databáze v Androidu. Hned v úvodu mě článek odkázal abych nejdřív prošel MySQL databáze krok za krokem a ta má 22 lekcí.

Takže mám rozpracované 3 lekce z toho jednu zdárně dokončenou. Mám navrhnutý layout aplikace a velice přesnou představu co by měla dělat, ale vůbec zatím nevím kde začít s jejím vytvářením.

Teď už nevím kam dál a nechce se mi začínat, nebo kupovat další lekci abych potom zjistil že to nikam nevede.

Potřeboval bych navrhnout výukový plán, který by mě provedl lekcemi, potřebnými pro vývoj mé aplikace.

Předem díky za každou snahu pomoct mi. :)

 
Odpovědět
1.12.2021 19:43
Avatar
x.listo
Tvůrce
Avatar
x.listo:2.12.2021 11:21

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).

 
Nahoru Odpovědět
2.12.2021 11:21
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:2.12.2021 11:41

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 :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.12.2021 11:41
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na x.listo
Petr Tupec:2.12.2021 12:40

Díky za radu, už řeším, jak se ke knize nejrychleji dostat.

 
Nahoru Odpovědět
2.12.2021 12:40
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:2.12.2021 12:42

Ano, seznam budu jen průběžně doplňovat já, jako vývojář, o další způsoby řešení.

 
Nahoru Odpovědět
2.12.2021 12:42
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:3.12.2021 16:22

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.

 
Nahoru Odpovědět
3.12.2021 16:22
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:3.12.2021 18:34

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

 
Nahoru Odpovědět
3.12.2021 18:34
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:6.12.2021 20:42

Ještě se zaptám, můžu pro tento učel použít i formát xml, na který tu je návod?

 
Nahoru Odpovědět
6.12.2021 20:42
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:6.12.2021 20:52

Jistě, ale vem v úvahu že ten soubor budeš psát a xml formát je výrazně 'ukecanější' než json...

 
Nahoru Odpovědět
6.12.2021 20:52
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:6.12.2021 20:55

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! :)

 
Nahoru Odpovědět
6.12.2021 20:55
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:10.12.2021 1:22

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.

Editováno 10.12.2021 1:23
 
Nahoru Odpovědět
10.12.2021 1:22
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:10.12.2021 12:43

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("chy­by") 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.

 
Nahoru Odpovědět
10.12.2021 12:43
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:10.12.2021 20:47

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.

Editováno 10.12.2021 20:48
 
Nahoru Odpovědět
10.12.2021 20:47
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:11.12.2021 1:20

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 ;)

 
Nahoru Odpovědět
11.12.2021 1:20
Avatar
Petr Tupec
Člen
Avatar
Odpovídá na Atrament
Petr Tupec:15.12.2021 23:37

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?

 
Nahoru Odpovědět
15.12.2021 23:37
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Petr Tupec
Atrament:16.12.2021 1:28

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.

 
Nahoru Odpovědět
16.12.2021 1:28
Avatar
Odpovídá na Petr Tupec
Matúš Olejník:16.12.2021 10:47

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 :D

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/asset­s/database/is­sue.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 :D

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.

Editováno 16.12.2021 10:47
Nahoru Odpovědět
16.12.2021 10:47
/* I am not sure why this works but it fixes the problem */
Avatar
Petr Tupec
Člen
Avatar
Petr Tupec:16.12.2021 15:09

Ahoj, děkuji za obrovskou snahu pomoct, je vidět, že máš danou problematiku v malíčku :D.

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ě. :)

 
Nahoru Odpovědět
16.12.2021 15:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.