- Magyarított Android alkalmazások
- Samsung Galaxy S24 - nos, Exynos
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- One mobilszolgáltatások
- Apple iPhone 16 Pro - rutinvizsga
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy Watch5 Pro - kerek, de nem tekerek
- Samsung Galaxy S21 FE 5G - utóirat
- Megérkezett a Google Pixel 7 és 7 Pro
- iPhone topik
Új hozzászólás Aktív témák
-
tl-x
addikt
válasz
bandi0000 #5642 üzenetére
Lényeg, hogy tudják vinni magukkal a weboldalt offline mobilon. A rajta lévő anyagokat el tudják érni offline. Amúgy nem tehetem fel a netre mert nem publikus. Az meg, hogy, mappaszerkezettel együtt másolgassák be maguknak mobilra nem hiszem, hogy mindenkinek menne. De nekem egy Windows telepítő is jól lenne ami bemásolja az egészet és kitesz nekik egy parancsikont a telón.
-
angyalpc2
aktív tag
válasz
bandi0000 #5617 üzenetére
Eszem ágában nincs laptopon, az nem arra való.
jelenleg is asztali i5 8500+ 32gb ...de nagyon régen legutoljára i5 4570+16gb-n futtattam... akkor azért köhögött 2016-ban még ssd-m se volt, ment de érződött hogy dolgozik a gép..
Aztán gondolkoztam váltáson a mostani 8500-ről,(most még nincs fenn) hogy mire érdemes, i9-9900-et vagy inkább i5/i7 12* vagy i5 14* valami és kellhet a 64Gb?Van esetleg teljesítmény Android studio CPU teszt a neten? (nem találtam)
Azért kérdeztem, hogy nektek mi a konfig és mi a tapasztalat...Esetleg AMD intel összevetésben is.
Külön érdekelne, hogy milyen mobilokon ellenőrzitek az appokat. vagy csak emuláció? -
Kutyauto
csendes tag
válasz
bandi0000 #5559 üzenetére
Végül is a futtató masina egyéni paraméterei adják meg,hol kezd majd pusztulni egy túl nagyra nőtt háttér adapter miatt.
Ha azt túl kicsire hagyom akkor viszont a hálózatot terhelem azzal, hogy folyton lekéregetem az adatokat amikor az user le meg fel scrollozgat az ujjával, én meg a háttérben noszogatom az adaptert.
Adott esetben ez a kis mozdulat (amit nagyon sokan úgy használnak hogy szinte észre sem veszik) felesleges adatforgalmi díjat is generálhat.
Mivel ezt egy általánosan használható objektnek szántam volna, legjobb az lenne ha a beállításoknál kilobájtban lehetne paraméterezni hogy hol kezdjen eldobni már korábban letöltött adatokat. (amiket aztán lehet hogy egy pillanat múlva ismét le kell töltenie) Az egyik ablakban, viewban ez lehet hogy ötezer rekordot engedne meg, egy másik nézetnél ahol képek vannak vagy ilyesmi, ott meg csak ötvenet.
Egész délelőtt gyúrtam az OpenAi-t meg a netet, de az összes megoldás kezdemény elhasalt valahol.
Most úgy látszik bámulatos módon nehéz egy tetszőleges objektum konkrét méretét lekérdezni Kotlinban. Nincs egy sima sizeOf.Lehet hogy túlgondoltam, ezt most elengedem.
-
Kutyauto
csendes tag
válasz
bandi0000 #5481 üzenetére
No igen ez alapból jó ötlet.... azon a szinten amin most bolyongok Androidban.
De később szeretnék tovább lépni MySql felé , illetve Repository-t is használni.
Korábban úgy csináltuk, hogy amikor mondjuk kiadtunk egy új programfájl verziót ami mondjuk adatbázis módosítást is igényelt / tartalmazott, és a felhasználói hálózaton vki megpróbálta lefrissíteni a programját, akkor a progi lefrissült, majd az indulásakor kinézett az SQL-re és ha más nem volt rajta bejelentkezve, akkor megfrissítette az adatbázist is a saját magasabb verziójára és szépen elindult.
A többiek a köv. induláskor persze nem tudtak belépni csak programfrissítés után.
Errefelé gondolkozom most is távlatilag, ezért küzdök ilyesmikkel.
-
Kutyauto
csendes tag
válasz
bandi0000 #5478 üzenetére
Köszi... No küzdök vele, haladok lassacskán.
Ez az egész abból jön, hogy próbálom megcsinálni azt az indításkori műveletet, amit az egyszálú Foxproban leegyszerűsítve anno valahogy így csináltam...
llRet = true
IF ( Nincs meg a helyén az adatbázis? ) // nem futott még, vagy letörölték, átnevezték...
llRet = Adatbázis létrehozása()
IF (llRet)
llRet = Tábla1 ellenőrzése / létrehozása / feltöltése()
ENDIF
IF (llRet)
llRet = Tábla2 ellenőrzése / létrehozása / feltöltése()
ENDIF
..... és így tovább
ENDIF
IF (llRet)
// futott már és/vagy elvileg kész a háttér
llRet = Adatkörnyezet beállítása ()
ENDIFReturn llRet
... ha itt False , akkor nincs értelme tovább futni, mert előbb utóbb hiányozni fog vmi...Itt nyilván minden egyes sort meg kell várni, mert ha valamelyik bármilyen hibára megy akkor a többit nincs értelme futtatni, elindulni sem lehet. Hát igen, ilyenkor az ember kitett egy szép folyamat jelzőt, az user meg szépen kivárta a végét...
Ezt nekem nagyon nehézkessé teszi kezelni, ha minden egyes adatbázis műveletet külön szálban, vagy launch ban kell indítani és az indító kód fut közben tovább. Szerintem ez is a Node.js tanfolyamon megismert Pyramid of doom vagy Callback hell helyzet, amit ott async - await()-ekkel oldanak fel.
No, ezt próbáltam itt is megérteni és kibogozni, de lehet hogy alapból rossz végén akarom megfogni a kapát... Bocs ha fárasztó vagyok :-) -
Kutyauto
csendes tag
válasz
bandi0000 #5476 üzenetére
Hát igen, össze vissza alakulnak ki a dolgok, nem lehet mindig lépésről lépésre haladni.
Sokszor kell visszamenni, átdolgozni,kipróbálni más megoldást is... Korábban is így boldogultam, csak talán egyszerűbb volt az az eszköz, meg nem voltak olyan berögződött elképzeléseim mint most.
Végül kipróbáltam a ViewModeles megoldást is.
Az initjébe betettem a lekérdezést így :
init {
var setup: Setup? = null
try {
viewModelScope.launch(Dispatchers.IO) {
setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
if (setup != null) {
this.pnSounds = setup!!.voice
this.pnBuzz = setup!!.buzzer
this.ActualMatrix = setup!!.matrix
this.ActualLevel = setup!!.level
}
}
} catch (e: Exception) {
Log.e("loadSetup hiba", e.message!!)
}
}
És így jó. Így is csak a viewModelScope.launch(Dispatchers.IO) megoldással megy.
A lifecycleScope nem tudom miből jönne (**), nem tudtam beimportolni sehogy. De a scope és launch szavak alapján a
LifecycleCoroutineScope.launch() -ot
meg ezt a
viewModelScope.launch() -ot találtam. Utóbbit választottam, mert nem kért importot és maradt is mert így működik.
(**)
Ezeket az alábbi Gradle sorokat beletettem, de sehogy sem akarta...
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
Köszi a tippet. -
Kutyauto
csendes tag
válasz
bandi0000 #5474 üzenetére
Hát igazából ez a sor
var setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
ami lekérdezné a tárolt beállításokat panaszkodik rá, hogy nem tud ő a fő szálon futni.
Erre aztán kipakoltam egy funkcióba, hogy majd az lekéri és beállítja amit kell.. de persze ezt se tudom hívni onCreate-ből, tehát amúgy sem volna jó.
Az egész földhözragadt sorról-sorra világképemmel van baj.
*****************
import android.util.Log
import com.example.rapidsk.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
suspend fun loadSetup() {
var setup: Setup? = null
val cSql = AppDatabase.getInstance(mycontext)
GlobalScope.async {
try {
var setup = AppDatabase.getInstance(mycontext).gradeDao().getsetup()
} catch (e: Exception) {
Log.e("loadSetup hiba", e.message!!)
}
}.await()
pnSounds=setup.voice
pnBuzz=setup.buzzer
ActualMatrix = setup.matrix
ActualLevel = setup.level
}
********
Pár hete kicsit Node.js -el is foglalkoztam, abban is eljutottam valameddig, az ottani async is bekavarhat. Később majd az volna az elképzelés, hogy MySQL + Node volna középen, a kliensek oldalán meg mennének az Android appok.De most jól összekeveredett a fejemben minden, túl sokféle újdonságot olvastam meg írtam össze túl gyorsan. Talán túl öreg vagyok én már ehhez. :-/
-
thiclyoon
aktív tag
válasz
bandi0000 #5467 üzenetére
Erre vonatkozott a kérdése: "újraindul az egész cucc a forgatás után és elveszik az alkalmazás teljes állapota", "szóval megoldja a kimentést, visszatöltést bármire amit a memóriában találok"
Persze hogy nem ajánlott, szó szerint ezzel kezdtem a válasz kifejtését#5468 fatal: én nem vitatkozom ezzel az állítással, elég volt a tanároktól meghallgatni
-
bucihost
senior tag
válasz
bandi0000 #5426 üzenetére
Updateltem a workmanagert, de semmi változás.
def work_version = "2.7.1"
implementation "androidx.work:work-runtime:$work_version"
Van intent és pendingintent is. Meg is adtam neki a hiányzó flaget. De ez sem vezetett semmire.PendingIntent pendingIntent = PendingIntent.getActivity(service, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
-
urandom0
senior tag
válasz
bandi0000 #5391 üzenetére
Nekem nem tiszta
Eddig csak Javaval foglalkoztam, és findViewById-t használtam, de jelentkeztem egy online kurzusra, ahol viszont Kotlint fogunk használni, és ott már így, ID alapján hivatkoznak a komponensekre. De a jóember a videóban semmi ilyesmit, amit most írtál, nem írt a kódba, egy vadiúj projektet kezdett, és nála csak simán úgy működött a btnLogin.setOnClickListener().
Kipróbálom ezt, amit írtál, és meglátjuk, köszi! -
domel
tag
válasz
bandi0000 #5359 üzenetére
Ezeket majd mind kipróbálom, csak most mindjárt éjfél lesz. Amúgy szerintem több applikációs tárhely is van, mert az alábbi kód nem oda menti a saját tárhelyre, mint amit te írtál: Android/data, hanem data/data/-package-/
static void ContextSaveStringArray(Context context, final String dir, final String nev, String[] adat) {
try { //data/data/$package$/app_$dir$/$nev$
ContextWrapper cw = new ContextWrapper(context);
File root = cw.getDir(dir, Context.MODE_PRIVATE);
if (!root.exists()) root.mkdirs();
File gpxfile = new File(root, nev);
FileWriter writer = new FileWriter(gpxfile);
for (String member : adat) {
writer.append(member + "\n");
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} -
Zsoxx
senior tag
válasz
bandi0000 #5321 üzenetére
val spinnerAdapter: ArrayAdapter<String> = ArrayAdapter(
requireActivity(), android.R.layout.simple_spinner_item, names
)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = spinnerAdapter
Az adapter jó, a spinner működik, csak a lista az eseménykezelőben lenullázódik. Elég rejtélyes...
Csak úgy működik, ha az eseménykezelőben újra betöltöm az adatbázisból.
(Előtte azért kell betölteni, mert az egyik objektum mező adja a spinner elemeit. ForEach-el csinálok egy külön string listát belőle. Ezzel sincs gond, csak az objektum listával.) -
[KgP].Robot
aktív tag
-
thiclyoon
aktív tag
válasz
bandi0000 #5207 üzenetére
nem nagyon, de módosított fájl
Így már nálam jobb a helyzet, viszont eszembejutott a tesztelés közben, hogy nem is igazán tudom milyen fokú lassúság elfogadható androidon, így kicsit nehezebb voltamit még észrevettem az a .clone() használata, két okból is:
- éles kódban szinte sosem találkoztam még a használatával, valamint
- a calendar egy "nagyobb" objektum (nem performance vagy fizikai nagyság, hanem "sok dolgot tud ahhoz képest, hogy egy cellának odaadod"), így elméletileg szerintem az egyes celláknak nem kellene megkapniuk az egész calendar objektumot, nincs hozzá közük. Így a clone kivehető lenne, ami szerintem egy jó irány lehet: [link]. Ehhez nyilván már az .xml-ben és egyéb .kt fájlokban is át kell írni dolgokat, ezt valószínűleg te jobban átlátod, könnyebben meg tudod csinálni (a módosított fájlban elvileg semmi nem tört el, de erre is ugyanez igaz). A .clone kivételével nálam még jobb lett a helyzet (persze cserébe kb az egész eltört, mivel a napokat nem tudta kiírni rendesen, ezért kell ez a több fájlt érintő átírás) -
thiclyoon
aktív tag
válasz
bandi0000 #5203 üzenetére
Több osztály is hiányzik, a build.gradle sincs meg, így nem tudom reprodukálni a dolgot. [stackoverflow: How to create a Minimal, Reproducible Example]: a lényeg hogy egy olyan kódot érdemes összerakni, ami a legkisebb akadályt gördíti a megoldáshoz vezető útra - engem pl nem zavar annyira ha nem minimális a példa, de szerintem senki se szeretne a hiányzó importokkal szöszölni stb. Nem tudom miért nem akartad az egészet feltenni, ha céges / egyéb privacy van akkor nyilván azokat a részeket vedd ki, de a kód fusson, mockolt adatok, átírt package név stb., ez elég egyszerűen kiküszöböli a fentieket. Az Android Studio ad erre egy egygombos megoldást: File - Manage IDE Settings - Export to Zip file..., vagy keresőben (shift-shift-tel előhozható) egy keresés az "export"-ra. Ez elméletileg kiszedi az ideiglenes fájlokat, outputot ilyesmiket (utána teszt hogy a kiadott zip tartalma fut-e nálad, előhozza-e a hibát). Persze ha más ennyiből megmondja a tutit, én nem állok az útba
Illetve no offense, talán nem hallottad még, ezért írom le: bármilyen programozásról van szó, .docx-et nem illik ilyen célra használni, .txt vagy a kód alapértelmezett kiterjesztése (jelen esetben .kt, .xml) is jó, ezeket mindet tudja olvasni a legegyszerűbb szövegszerkesztő is
-
thiclyoon
aktív tag
válasz
bandi0000 #5200 üzenetére
A leírás alapján nem kellene gond legyen, esetleg megpróbálhatod egy erősebb windowsos gépen emulátoron (vagy macen, talán még jobban is megy ezeken) hogy ott is csinálja-e. Én sokáig pl egy már korosodó snapi 625-tel teszteltem, viszont akkor sem tapasztaltam ilyet, komplexebb UI-jal sem. A betöltés után is akadozik a felület? Ha nem, akkor szerintem nincs gond, ha igen akkor viszont valami tényleg félremehetett. Ha gondolod átdobhatod a kódot (ha elég kis részlettel reprodukálható akkor akár ide is beteheted) hogy ránézhessünk mi a helyzet
#5201:
Nem teljesen tiszta, hogy mi a cél: ha csak segítség kell, akkor ide szerintem nyugodtan leírhatod a problémát, ami éppen szembejön. Ha viszont nincs rá időd, akkor ez egy mikro-fizetős projektnek néz ki: a .net kód bonyolultságától függően dobhatsz egy pm-et (c# nyelvvel foglalkoztam régebben, ma már nem), viszont időszűke miatt nem ígérem hogy tudok segíteni -
domel
tag
válasz
bandi0000 #5109 üzenetére
Csak pirossal aláhúzza, vagy hibával meg is áll a fordítás?
Én pont tegnap szívtam egy olyannal, hogy ezt: implementation 'com.android.support:appcompat-v7:28.0.0' nem fogadta el, mindenféle hamis hibákat írt, aztán mikor ezt: implementation 'com.android.support:support-v4:28.0.0' alá tettem, akkor meg hirtelen minden jó lett. A diffutilt nem ismerem, nem merek így okoskodni.
Tegnap frissítettem valamimet a play áruházban, és ott láttam, hogy augusztustól az új appok 29-es api szinten kell hogy működjenek, novembertől meg a frissítéseknek is 29-es api szintre kell hozniuk az applikációkat. Eléggé meglepett, hogy ennyire belepofáznak. Emulátoron kell fordítanom, mert ennyire új telefonom nincs is -
lanszelot
addikt
válasz
bandi0000 #5103 üzenetére
A szakmámban rengetegen jönnek oda hozzám és akkora marhaságokat kérdeznek ingyen, még se zavarom el őket a ....
Pedig semmin se változtatna, csak magam köpném szembe, hogy elszálltam.
Ez pedig egy fórum, ha nincs kedved felnézni se kell.Semmi kötelezettség nincs itt.
Én ha segíthetek, vagy lexarhatok, akkor segítek, mert miert ne. És ha nagyon alap dolgot kérdez valaki, akkor emlékezni kell arra hogy mi volt, mikor én kezdtem. Milyen jól esett volna ha vslaki normálisan szól hozzám.
Nem pedig dögöljön meg a szomszéd tehene is. -
lanszelot
addikt
válasz
bandi0000 #5101 üzenetére
Én semmit se kértem tőletek.
Szerintem össze keversz vkivel.
Alap dolgokat kérdeztem, hogy tudjam mik azok amik benne legyenek az oktató videóba.
Mondtam hogy mit szeretnék tanulni, és azzal kapcsolatban kérdeztem, hogy tudjam mit kell vennem.
Be is linkeltem, hogy abba benne van-e. Meg is vettem azt az oktatót.
8 óra után, 84-ik résznél akadtam el. De ezt se írtam soha sehol, csak hogy elakadtam.
Soha se kértem, hogy bármit írjatok. Egy betűt se.
Valakivel össze keversz, nyugodtan olvass vissza. -
lanszelot
addikt
válasz
bandi0000 #5099 üzenetére
Félre értettél.
Az alkalmazás írása volt a célom.
Nrm írtam semmit. Egy sort se.
Kerestem olyan oktató anyagot amiben benne van az amit el akarok érni. De ezt sokszor le is írtam. Van egy célom, ezért választottam ezt a nyelvet, mert ez admotivációt.
Gúnyolás: 'mondjuk nem androiddal kellett volna kezdeni'
felette: 'szép bátorítás' -mert amit írtam hülyeség? Senki se vette a fáradtságot, hogy segítsen neki, és baj hogy segítettem...Te és még 2 tag segitett végig, s többiek folyamatosan: ne ezt tanuld, menj suliba, ezt igy nem lehet...stb
-
lanszelot
addikt
válasz
bandi0000 #5075 üzenetére
Igen, pár beviteli mező, és amiket oda beírnak, azt később vissza olvasni.
Felhő nem kell, mert csak én használom, és csak ha telefont váltok akkor kell.
Android room-ra rákeresve kiírta SQLite , és az van abba a udemy leckéken, amit linkeltem, így megvettem. Bár nem tudom miért SQLite Demo a neve a leckék között.
Az egy külön program? Na, mindegy, majd ha oda érek megtudom
Köszönöm a segítséget. -
lanszelot
addikt
válasz
bandi0000 #5073 üzenetére
Hello,
Írtam, hogy az adat kezelésről nem tudok semmit.
Tehát hogyan kezeli a mentett adatokat? Fogalmam sincs.
Írtam, hogy a régi progit ti segítettetek megírni. Tehát az adat kezelést nem én írtam meg.
Most se tudom hogy kell. Az a 10% amit nem tudok megcsinálni.
De hiába keresem google, hogy Kotlin adatkezelés, mert semmi se jön ki.
Ebben benne van az adatkezelés?
Ha igen akkor megveszem. És majd ha oda érek, akkor fogom tudni.
De én nem látom. hogy benne van vagy nincs.
Ilyenre gondolok, hogy személyek adatait a nevéhez elmenti, majd vissza tudjam olvasni ha rákeresek. Egy személy adatait, vagy mind.
Tudjam szinkronizálni az adatokat másik telefonnal /ha pl új telefont veszek/
Illetve tudjam frissíteni az alkalmazást gépről /google play nélkül/ úgy hogy az adatok megmaradjanak.
Ezek benne vannak abban a leckében? -
thiclyoon
aktív tag
válasz
bandi0000 #5057 üzenetére
Valószínűleg senkit se érdekel, és senki se foglalkozik vele, de mai napig így tanítják: függvény / function: egy programrész, melynek (többek között) van visszatérési értéke. Metódus / method: egy programrész, melynek nincsen visszatérési értéke. (Csak a különbséget emeltem ki, természetesen több tulajdonságuk van még, de ez tér el.)
Kotlinban ez érdekes kérdés, mert gyakorlatilag minden függvény/metódus igazából függvény (a fenti definíció alapján), hiszen mindegyiknek van visszatérési értéke (ha nincs jelölve explicit, akkor Unit, de ezt ki is lehet írni).
Kotlinhoz általánosságban: én nagyon szeretem a nyelvet (talán mert nagyon hasonlít a swift-hez), ha komolyabb kérdés van, beszállok a "vitákba" ha van időm
de nem nyelv- vagy alkalmazási terület (jelen esetben android) specifikus részeket szerintem teljesen felesleges itt tárgyalni. Ha valaki nincs tisztába legalább az OOP alapjaival (pl. nem tudja, mi az hogy öröklés, implementálás), akkor szvsz felesleges elkezdeni az androidot mert nem sok esély van rá hogy megtanulja alkalmazni így hirtelen, egyből. Nem bántásképp, hiszen én pont így kezdtem (aztán 1-2 év múlva újra elővettem, több tudással), szóval ismerem a helyzetet
-
domel
tag
válasz
bandi0000 #5057 üzenetére
Ránéztem arra a videóra.. Totál kezdőknek szánt videóban myFunction-nek nevez el a fószer egy függvényt, aztán csodálkozunk ha a célközönség azon agyal, hogy "mit csinál az a myFunction". Lanszelot gyerek nekiállt kotlinban programozni tanulni ami nagyon dicséretes, csak ember nem lesz aki segítsen neki.
-
lanszelot
addikt
válasz
bandi0000 #5055 üzenetére
Hello,
Tökéletesen értem mit csinál a kód.
Ezt irtam is.Mindent értek, és meg is tudom csinálni.
A videót csak belinkeltem, és azt is oda irtam mikor kezdődik a függvény.
Írtam, hogy tudom mi a függvény, mi a methodus.
Azt nem értem minek?
Erről pedig sehol semmi.
Nincs fizetős. És szeptembertől /amikortól talán lenne/elvileg vége a karanténnak tehát vissza dolgozni, amellett pedig nem tudok elmenni suliba.
Teljesen jó ez a videó oktatás, csak a fuggveny, methodus stb értelmét nem látom.
Program rész amihez vissza tudok nyúlni, hogy ne kelljen újra írni. Ok. Methodus, ugyanez osztályon belül.
Tehát minek 2szer ugyanaz.
És mikor akarok egy teljes részhez vissza nyúlni?
Tehát azt nem értem hogy minek?Arguments: azt nem értem mi. Értem mit csinál, meg tudom csinálni, de mi az. Nem osztály, nem függvény, mi az? Hogy fordítják le magyarra? Viták? Nem hiszem.
-
lanszelot
addikt
válasz
bandi0000 #5042 üzenetére
Hello,
Amikor kezdem az új project-et akkor meg kell adnom melyik android verzió.
Ott nekem csak Android 10+ volt, míg a videón 4.1-et kellett kiválasztani.
Az, hogy ott nekem legyen 4.1 ahhoz a beállításokban le kellett tölteni.
Az emulátor rész az máshol van, ott telefont is lehet választani, és annak a rendszerét, vagy android verziókat /azt mutatta a videóban, megcsináltam, de nem érdekel az emulátor/
Ezért írtam nem AVD, hanem ASActivity/Fragment, nem tudom az mi. Ha arra gondolsz, hogy amit látok, és amit nem látok program kódok, akkor értem, de nem tudtam, hogy így hívják.
TextView -részt nem értem. Csak annyit tudok, amit elmondott, az se biztos, hogy mindent felfogtam mi az amit épp mond.
Mivel az elején sok mindent csak említ, és mondja, majd később elmagyarázza, nem álltam le háttért keresni, hogy pontosan mi az. Pl elmondta, a függvényket, amit értettem amit mond, de hogy ha vissza kellene mondanom egy betűt se találnék a fejemben, tehát értem, de nem tiszta...egyáltalán nem /viszont csak felsorolta, és később fogja elmagyarázni, ezért nem kezdtem kapálódzni/
Teljesen az elejéről indulok, fogalmam sincs semmiről, így minden új nekem.
/C64 basic: ebben programoztam a 80-as évek végefelé, és itt megszakadt, tehát nagyon lemaradtam/
Ablakos: res/layout -ban egy üres lap van, ott sincs Hello World /gondolom string kellene legyen print("Hello World") ilyet kellene keresnem, vagy nem? Mivel középre rakja, így még koordináta is kell, hogy legyen ott. Én ezeket nem találom.
Tudom hol kell átírni, illetve pozicionálni, át méretezni stb, de a kódban nem találom, ott hol van? -
lanszelot
addikt
válasz
bandi0000 #5038 üzenetére
Hello,
Nem AVD, hanem Android Studio /nem emulátorozom, ha majd kell, rádugom a telót, van annyi régi....egyiket befogom tanulónaklegalább lesz értelme, hogy van /
Le kell szedni a 4.1-et, mert visszafele nem kompatibilis, de az újakra a régi igen.
És az oktatást pont úgy akarom követni, ahogy ott mondja, amúgy nem sok értelme van.
Dob majd egy hibát, és csak pislogok nálam miért, nála miért nem.
A tudásommal még nagyon messze van, hogy különböző android verziókon gondolkozzam, jó a 4.1 az alapokra. Utána meg majd.Angollal nincs gondom /programozáshoz kell is/.
Visszafele is igaz, hogy Kotlin-ról Java-ra is egyszerű lesz átállni.
Most a kotlin fogott meg, írtam is miért /van cél amit el akarok benne érni/Nagyon birizeli az agyam, bár már jóval odébb vagyok, de ez még mindig homály, ha esetleg vki tudná a választ:
Ezt találtam valamennyire használhatónak, többihez képest elmegy.
Tele vagyok kérdéssel:
27:50 -nél pl. miért van ott a "Hello World" a képernyőn?
- megnyitottam az Android Studio-t,
- új project,
- üres project,
- és ott van hogy "Hello World"
- Main Activity fül alatt ott a kód, de ott nincs "Hello World" sehol
- miért lett ott? az üres project nem üres? Én sehova se írtam "Hello World" -t, a project neve "HelloWorld" tehát az sem az.
- hol találom meg azt a feliratot a kódban? A main activity nem a kód? Akkor az mi? És hol a teljes kód?
Lenne még kérdésem, de az nem "sürgős" és hátha később majd szó lesz róla. -
lanszelot
addikt
válasz
bandi0000 #5036 üzenetére
Hello,
Az android verzió az én AS-ban Android 10+ /többit le kellett töltenem/, tehát hozzá kellett vennem az előző verziókat, hogy a videót tudjam folytatni. Persze ez így könnyű, ha már tudod mi merre. De ez nem volt benne egyikbe sem. Majd találtam egy magyar srácot, bár 2016-os, aki megmutatta kb mit keressek. /mert azóta AS 1 ből AS 4 lett/
Köszönöm az ajánlást, de azok nem videók, azzal semmire se megyek. Youtube-on alig van AS Kotlin, és ami van az borzalom. Udemy dettó. Most talán találtam egy srácot, aki nagyjából jó, de így is van kérdésem, amit szerintem nem kellene átugrania.Html: azt tudom, hogy nem program nyelv, és nem androidhoz kérdeztem. Azt csak válasznak írtam, hogy miért android kotlin. Html alá biztos kell valami program nyelv, pl java /csak írtam vmit mert nem tudom mi az/, hogy a számítások, adat bekérések, tárolások stb
-
thiclyoon
aktív tag
-
thiclyoon
aktív tag
válasz
bandi0000 #4980 üzenetére
Ilyen esetben én a dialogot jobban preferálom. A fragmentcsere is hasznos tud lenni, de szerintem kevés esetben hasznos / szép / illik az alkalmazásba. A dialog cancel + ok gombokkal szerintem erre teljesen oké, mikor csak egy megerősítés szükséges. Komplexebb esetben, mikor például nem minden fér el szépen egy dialogban, akkor érdemes lehet átgondolni a fragment-cserét is persze, nem kell mindenáron mindent belezsúfolni egy dialogba.
-
thiclyoon
aktív tag
válasz
bandi0000 #4950 üzenetére
Igen, valószínűleg ez a statikus fragment-ek miatt nem működik. Végszükség esetére a fragment váltás után (még a fragment-ben) a dolgok visibility-jét átállíthatod gone-ra. De a csúnya kódok elkerülés érdekében én inkább a sima régi módszernél maradnék. Esetleg egy új activity-t is nyithatsz neki, és akkor minden tuti, még a megjelenést (mármint az animációt, gondolom emiatt is szeretnéd a fragment cserét) is testre tudod szabni
-
thiclyoon
aktív tag
válasz
bandi0000 #4946 üzenetére
Ahogy mondani szokták, a jelenlegi megoldás szuboptimális, de működik. Biztos van szebb, egyszerűbb megoldása is
Ezekkel a kódokkal a home-ban a text-re kattinva lecseréli a notification fragment-re, majd a dashboard-ra nyomva kicseréli a dashboard-ra (ahogy várnánk). A többi feladat megoldását (pl. home-ra visszanyomásra mi történjen) az olvasóra bízom
MainActivity.kt-ba
interface MyListener {
fun clicked()
fun declicked()
}
class MainActivity : AppCompatActivity(), MyListener {
...
override fun clicked() {
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.nav_host_fragment, NotificationsFragment())
transaction.commit()
}
override fun declicked() {
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.nav_host_fragment, DashboardFragment())
transaction.commit()
}
}HomeFragment-be:
override fun onCreateView(...): View? {
...
textView.setOnClickListener {
(activity as MyListener).clicked()
}
...
}DashboardFragment-be:
override fun onCreateView(...): View? {
...
textView.setOnClickListener {
(activity as MyListener).declicked()
}
...
}És hogy lásd a változást, res/layout/fragment_notification-be:
<androidx.constraintlayout.widget.ConstraintLayout
...
android:background="#CA1414"
tools:context=".ui.notifications.NotificationsFragment">Illetve a res/layout/fragment_dashboard-ba:
<androidx.constraintlayout.widget.ConstraintLayout
...
android:background="#066EFF"
tools:context=".ui.dashboard.DashboardFragment"> -
thiclyoon
aktív tag
válasz
bandi0000 #4944 üzenetére
Pont nemrég kellett használnom Bottom Navigation-t, és én is másképp emlékeztem rá
Szerintem megéri ezt az új megközelítést használni. Nekem különösen a navigation res mappa tartalma tetszik, hasonlít az iOS-hezHa jól értem, az a kérdés, hogy hogyan adjunk hozzá még egy fragment-et a bottom navbar-hoz:
0. Activity létrehozása
1. res/menu/bottom_nav_menu-ben az elemek módosítása (adjunk hozzá egy navigation_blank id-jű item-et)
2. res/navigation/mobile_navigation-ben a felső sorban "new destination" (create new, BlankFragment)
3. MainActivity-ben az AppBarConfiguration-hoz adjuk hozzá 4. elemnek az R.id.navigation_blank-et
4. res/navigation/mobile_navigation-ben a létrehozott destination id-ja legyen navigation_blank
5. futtatás után ott az elvárt kimenet -
thiclyoon
aktív tag
válasz
bandi0000 #4942 üzenetére
Activity-ben ?. operátor nélkül is működik, fragment-ben szükséges a ?. operátor. Alapesetben nem lehet null, de ha pl. átmegyünk valamilyen Settings, vagy Helper osztályba, akkor egy rossz architektúra / tervezés után simán jöhetnek a null pointer hibák ilyen esetben.
Jó megoldás? Nem igazán van, illetve én nem tudok rólaNemrég láttam egy meme-t, ahol az volt a poén fő eleme, hogy mégis mi a fenének kell akár egy Toast-hoz context. Teljesen felesleges, ez az Android dizájn hibája, egyszerűen csak azt akarjuk, hogy jelenjen meg az aktuális képernyőn. Ha mégis szükséges egy context, vagy hasonló komponens (resource, activity, vagy akár teljesen más is, asynctask, stb.), akkor ezt javaslom, ez működni fog: [link] (kiegészíthető get/set-tel, egyéb dolgokkal, stb). Widget-nél tud ez is probléma lenni, de akkor kell a jó tervezés - vagy egy kis szenvedés a widget-nél
-
thiclyoon
aktív tag
válasz
bandi0000 #4928 üzenetére
A kártya beállítása után kért egy budget-et tőlem, és ha annak elérem az 50-90-100%-át, akkor minden project owner-nek küld email-t (ezt még nem sikerült kipróbálni, nem vagyok még 50%-nál sem). Ezek alapján ha gáz van, akkor egy gyors leállítás - megjavítás jó lehet ilyen helyzetben, főleg a fejlesztés során nyilván.
Firestore-ban collection-ök vannak (bár igaz, ezek ~ táblák). Az adatbázis - backend rész annyira nem az én műfajom, de igen, természetesen ez is megoldható benne (és ez a jó megoldás szerintem is). A "kapcsolótábla" tartalma (helyessége) viszont tőled függ, ha te rossz id-t írsz bele az userid "oszlopba" az egyik rendelésnél, akkor nem fog szólni neked senki... legalábbis én nem tudok róla, hogy itt lehetne ilyen kényszereket létrehozni.
Alapvetően szerintem nyugodtan gondolhatsz a firestore-ra úgy, mint egy sql adatbázis, max az ilyen dolgokat, mint a kényszerek, neked kell implementálnod (-> firebase functions részben ezt elég jól el tudod intézni). Ez sem egy vészes dolog, sima nodejs-ben megy az egész.
-
thiclyoon
aktív tag
válasz
bandi0000 #4926 üzenetére
(Nem biztos, hogy segít, de hátha..)
Én nem olyan régen kezdtem el használni a free tier-en túl az egyik projektben, egész pontosan március az első hónap, ami végig blaze plan-ben fut (február közepén váltottunk fizetősre, februárban még nem értük el a fizetős határt, így március elején nem kellett semmit fizetni). Szerintem amint úgy gondolod, hogy kellene egy fizetős funkció, akkor érdemes upgrade-elni blaze plan-re, ugyanis bár már ekkor meg kell adni egy kártyaszámot, de nem von le semmit. Mi jelenleg a beállított budget alatt vagyunk, de eddig nem jött semmilyen levonás / számla. Ennél többet április elején tudok mondani, de ha belegondolsz, mivel a funkciók úgy vannak megadva, hogy "x $ / second", így nekem ebből az jön le, hogy minden hónap elején jön majd valami, hogy ennyit és ennyit fogyasztottál, ezért ennyit és ennyit levonunk. De ha valakinek több tapasztalata van, ossza meg hogy okosodjunk -
Con Troll
senior tag
válasz
bandi0000 #4890 üzenetére
Nekem sincs, de akkor mondjuk, ha megfordítom a kérdést: régebben láttam, hogy ilyen-olyan appokhoz lehet letölteni modolt verziót (pl. reklám nélküli). Azokat hogy csinálják? Elvileg ott is csak az apk telepítőhöz férnek hozzá, és azt birizgálják.
Közben decompile-oltam az apk-t, szembejött velem egy rakat .smali fájl, valami teljesen fura programnyelvvel, úgyhogy azt hiszem nekem itt ért véget a történet -
Con Troll
senior tag
-
Gyárfás
tag
válasz
bandi0000 #4877 üzenetére
Egy serversocket és egy kliens socket kell, a többi a szálkezelésre van bízva, legalábbis amit én csinálok.
Androidnál viszont én inkább csak két alkalmazás közti kommunikációra szerettem volna példát látni, nem kifejezetten chat-et akarok írni, de végülis lehet, hogy hasznát veszem ennek a db-nek. Alapvetően az androidon futó alkalmazást úgy találtam ki, hogy ne tároljon semmit, csak beszélgessen, de végülis egy táblázatot kellene majd megjelenítenie, amiben változhat a tartalom.
-
Gyárfás
tag
válasz
bandi0000 #4875 üzenetére
Tényleg nagyon sok firebase példát találtam neten, csak igazából nem tudtam mi az a firebase. Desktop java alkalmazásnál elég csak írni két socketet és máris hálózaton keresztül kommunikálnak az alkalmazások.
Röviden le tudnád írni nekem, hogy pontosan mi az és miért kell nekem a firebase ahhoz amit csinálok?
-
Sianis
addikt
válasz
bandi0000 #4868 üzenetére
Igen. Lassan időszerű androidx-re migrálni mindent, függőségeket is. Én még nem talaáltam jó megoldást, hogy hogyan lehet egyszerűen és gyorsan felgönyölíteni ezt a dolgot, de problémát még nem okozott. Ha csa support libeket használsz, akkor mindet egy verzióra kell hozni. Aztán ha a függőségekben is van beégetett verzió, akkor excludulni kell benne a support libet.
De javítson ki valaki, akinek van jobb ötlete, nekem is jól jönne.
-
Sianis
addikt
válasz
bandi0000 #4866 üzenetére
Az AlarmManager barmennyire is ugy hangzik, de nem az ebresztoorat allitgatja.
Hanem pl valos orahoz kotott idopontokban kuld ki egy Intent-et. Szoval ezzel pont azt tudod elerni, hogy az appod kapjon egy Intent-et egy adott idopontban, vagy eppen az adott idopont utani elso telefon feleledes utan. Szoval az app kiloves nincs ra hatassal, viszont a telefon restart igen, olyankor minden ilyen torlodik.
-
muszurkefal
aktív tag
válasz
bandi0000 #4849 üzenetére
Most újrabuildeltem és megjelent. Érdekes. Kivéve néhány bizonyos Activity-t, ami már 1 hete furán viselkedik. Ezeknél nem jelenik meg a beállított background.
-
thon73
tag
válasz
bandi0000 #4846 üzenetére
Talán annyi érdekesség van benne, hogy azért kezdtem el, mert nem találtam programozót, aki megvalósítsa az ötleteimet. Később másnak is fejlesztettem, olyasmit, ami engem is érdekelt. Ma megint ott tartok, ahol az elején: ha lenne valaki, aki megcsinálja helyettem, nem bánnám.
-
thon73
tag
válasz
bandi0000 #4844 üzenetére
Igen, ez eredetileg egyfajta front-end-nek készült. A táblák, a listView-k és az egyes rekordokat megadó űrlapok is néhány sorból elkészíthetőek, mert a háttér már kész. Ugyanakkor minden a programban készül, és ez elég nagy flexibilitást adott ahhoz, hogy a legkülönbözőbb projektekben használjam. Az export-import szöveges, és ez - többek között - azért jó, mert könnyen lekezelhetőek az adatbázisváltozással járó problémák.
Neked sztem nem az adatbázis résszel, hanem a file-résszel van problémád. A helyedben meghívnék egy file-kezelőt egy folder-ért, aztán amit visszaad azt kiegészíteném egy file-névvel, és kész. Ha nincs megfelelő file-kezelőd, akkor érdemes az Open Intent filekezelőt használni.
Egyébként a fenti projektben egy komplett file-kezelő rész is van, az praktikusan külön kiemelhető, ha szükségét érzed, és az igényeidnek megfelelően módosítható. De elég univerzális amúgy. -
thon73
tag
válasz
bandi0000 #4842 üzenetére
A "destination" is file kell legyen, nem pedig folder.
A logikával szemben (vagyis másold ezt a file-t a megadott folder-be), a parancs úgy szól, másold a forrás file tartalmát a cél file tartalmáNAK. Vagyis hozz létre egy üres file-t a directoryban, és abba már bele fogja tenni.
Hirtelen kereséssel egy példa: https://stackoverflow.com/a/30948757Más:
az adatbázis kimásolása egy aránylag egyszerű dolog, de az exportálása egyáltalán nem triviális. Egy korábbi projekt során küzdöttem ezzel; ráadásul most épp leporoltam ezt a projektet. Ha érdekel, itt: https://github.com/Palmodroid/Mecsek megtalálod. Hozzáteszem, ez egyáltalán nincs kész, de az export-import rész működik. -
Zalanius
tag
válasz
bandi0000 #4839 üzenetére
Ha M vagy újabb a verzió, kértél / kaptál rá futás közben is engedélyt?
-
t181
senior tag
válasz
bandi0000 #4836 üzenetére
Elvileg úgy kellene működnie, ahogy leírtad.
Mi általában kézzel joinoltuk össze a táblákat és csak a szükséges mezőket selecteltük, amiket egy egyedi osztályban adtunk vissza.
A szakdogámban így csináltam:
lekérdezés
a használt osztály
Új hozzászólás Aktív témák
Hirdetés
- AKCIÓ! ASUS B650M R5 7600X 64GB DDR5 1TB SSD RTX 3080Ti 12GB Be Quiet! Pure Base 500FX ASUS 1000W
- LG UltraGear Gaming Monitorok: FRISS SZÁLLÍTMÁNY -30%
- BESZÁMÍTÁS! Apple MacBook Air 15 M3 8GB 256GB SSD garanciával hibátlan működéssel
- Készpénzes számítógép PC félkonfig alkatrész hardver felvásárlás személyesen / postával korrekt áron
- BESZÁMÍTÁS! AOC 24P1 24 FHD 60Hz 5ms monitor garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest