- Bemutatkozott az Oppo kamerás csúcsmodellje
- iPhone topik
- Samsung Galaxy A55 - új év, régi stratégia
- A Telekomnál is elérhetővé vált a Vivo csúcsszériája
- Külföldi prepaid SIM-ek itthon
- Fotók, videók mobillal
- Android szakmai topik
- Yettel topik
- Xiaomi 17 - még mindig tart
- Honor 600 – kezes, kitartó, költséges
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
Kutyauto
csendes tag
Szia! Nem nagyon követtem a projekted alakulását, de első ránézésre egy viewpager-nek tűnik, amit összehoztál. Abban van egy offscreen page limit, amit megváltoztathatsz, ha konzisztens működést szeretnél az oldalaidon. Feltéve, na nem túl komplexek az oldalak. Általában nem jó ötlet mindent a memóriában tartani.
Üdv,
Köszönöm, ez megoldotta!
Amiket korábban írtál, azoknak is kezdem kapisgálni az értelmét...
Megtapasztaltam mekkora szívás is pl. amikor egy nem classban, hanem primitív változóban tárolt adatot később mégis by reference akarnék passzolgatni (végül találtam rá megoldást),
tovább addig, hogy mennyivel könnyebb is viewModelt, meg livedata-t használni , meg databindinget... meg stílusokat, meg még egy rakás dolgot amiket használni kell sokat mire az alapjaik készséggé válnak.
Óceán van tudnivalókból. Ha kitart a lelkesedésem pár év múlva talán ügyes 60-as junior leszek
-
BE4GLE
senior tag
Sziasztok
A MainActivity-men van egy tabLayout aminek 3 lapja van.
Mind a háromba egy -egy xml töltődik, a hozzájuk tartozó Class-ok Fragment() ből vannak.
A második és harmadik lapok felépítése, betöltése teljesen megegyezik, csak a tartalma és a vezérlések kódja más.
Ha az elsőről a második page-re átlépek, majd az elsőre vissza akárhányszor, az első onCreateView-ja sosem fut le újra.
Ha az elsőről a harmadikra lépek át akár egy lépésben, vagy akár a másodikon keresztül, majd vissza az elsőre, akkor az első lap onCreateView-ja azonnal lefut újra.
Nem találom a kódban semmi indokát ennek a különböző viselkedésnek, ahogy látom minden vonatkozó rész tök egyforma felépítésű. Lehet ennek valami befolyásolható oka amit nem látok, vagy véletlenszerű, hogy az időlegesen nem látható első oldalt mikor tölti újra rendszer? Meg tudom kérni valahogy ne csinálja?
Szia! Nem nagyon követtem a projekted alakulását, de első ránézésre egy viewpager-nek tűnik, amit összehoztál. Abban van egy offscreen page limit, amit megváltoztathatsz, ha konzisztens működést szeretnél az oldalaidon. Feltéve, na nem túl komplexek az oldalak. Általában nem jó ötlet mindent a memóriában tartani.
-
Kutyauto
csendes tag
Sziasztok
A MainActivity-men van egy tabLayout aminek 3 lapja van.
Mind a háromba egy -egy xml töltődik, a hozzájuk tartozó Class-ok Fragment() ből vannak.
A második és harmadik lapok felépítése, betöltése teljesen megegyezik, csak a tartalma és a vezérlések kódja más.
Ha az elsőről a második page-re átlépek, majd az elsőre vissza akárhányszor, az első onCreateView-ja sosem fut le újra.
Ha az elsőről a harmadikra lépek át akár egy lépésben, vagy akár a másodikon keresztül, majd vissza az elsőre, akkor az első lap onCreateView-ja azonnal lefut újra.
Nem találom a kódban semmi indokát ennek a különböző viselkedésnek, ahogy látom minden vonatkozó rész tök egyforma felépítésű. Lehet ennek valami befolyásolható oka amit nem látok, vagy véletlenszerű, hogy az időlegesen nem látható első oldalt mikor tölti újra rendszer? Meg tudom kérni valahogy ne csinálja?
Az első lapon futó kód minden életciklus függvényét kiírattam és néztem a konzolon mi történik : átkattintok az elsőről a második oldalra, majd vissza.... Aztán az elsőről a harmadikra és vissza.
Elsőnél csak az onPause, majd az onResume fut le. Másodiknál van még valami, ami kiváltja az oldal újratöltését is. Át kell írnom ezt az onCreateView-t, hogy mindenképp jó legyen.
*******************************
D/EGL_emulation: app_time_stats: avg=598.44ms min=10.23ms max=6666.20ms count=12I/System.out: TAB1 fragment onPause
I/OpenGLRenderer: Davey! duration=766ms; Flags=0, FrameTimelineVsyncId=192136, IntendedVsync=38222434750298, Vsync=38222868083614, InputEventId=0, HandleInputStart=38222881628520, AnimationStart=38222881673120, PerformTraversalsStart=38222884529220, DrawStart=38223142900020, FrameDeadline=38222468083630, FrameInterval=38222881491520, FrameStartTime=16666666, SyncQueued=38223181721620, SyncStart=38223182247220, IssueDrawCommandsStart=38223183019820, SwapBuffers=38223197923120, FrameCompleted=38223201973620, DequeueBufferDuration=102100, QueueBufferDuration=2548500, GpuCompleted=38223201310720, SwapBuffersCompleted=38223201973620, DisplayPresentTime=8026311069216502372,
D/EGL_emulation: app_time_stats: avg=17.82ms min=5.02ms max=217.56ms count=41
D/EGL_emulation: app_time_stats: avg=772.65ms min=3.85ms max=4551.29ms count=6I/System.out: TAB1 fragment onResume
*************************
Aztán átkattintok az elsőről a harmadikra és vissza... Szintén a pause és a resume fut le , csak közben valamiért még belép a reklám blokk is.. de ha kiszedem az egész bannert, akkor is ugyanez van.
************************************
I/System.out: TAB1 fragment onPause
D/EGL_emulation: app_time_stats: avg=77.93ms min=3.00ms max=3133.50ms count=50
D/DynamitePackage: Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl
I/Ads: This request is sent from a test device.
W/ConnectionStatusConfig: Dynamic lookup for intent failed for action: com.google.android.gms.ads.service.START
I/System.out: TAB1 fragment onResume
Ez után viszont jön még egy rakás sor, ami az előzőnél szintén nem jött. talán a kiemelt résszel van baja, ami miatt aztán megjön az onCreateView is.
I/Choreographer: Skipped 38 frames! The application may be doing too much work on its main thread.
D/EGL_emulation: app_time_stats: avg=5.34ms min=2.11ms max=30.96ms count=52
I/OpenGLRenderer: Davey! duration=941ms; Flags=0, FrameTimelineVsyncId=192481, IntendedVsync=38239284749624, Vsync=38239918082932, InputEventId=930823484, HandleInputStart=38239921690220, AnimationStart=38239921719020, .... és a többi
************************************************* -
Kutyauto
csendes tag
Sziasztok
A MainActivity-men van egy tabLayout aminek 3 lapja van.
Mind a háromba egy -egy xml töltődik, a hozzájuk tartozó Class-ok Fragment() ből vannak.
A második és harmadik lapok felépítése, betöltése teljesen megegyezik, csak a tartalma és a vezérlések kódja más.
Ha az elsőről a második page-re átlépek, majd az elsőre vissza akárhányszor, az első onCreateView-ja sosem fut le újra.
Ha az elsőről a harmadikra lépek át akár egy lépésben, vagy akár a másodikon keresztül, majd vissza az elsőre, akkor az első lap onCreateView-ja azonnal lefut újra.
Nem találom a kódban semmi indokát ennek a különböző viselkedésnek, ahogy látom minden vonatkozó rész tök egyforma felépítésű. Lehet ennek valami befolyásolható oka amit nem látok, vagy véletlenszerű, hogy az időlegesen nem látható első oldalt mikor tölti újra rendszer? Meg tudom kérni valahogy ne csinálja?
-
Kutyauto
csendes tag
Sziasztok,
No, elvileg készen vagyok egy alap változattal. Van itthon egy 2016 os kisebb felbontású Samsungom, azzal elvacakoltam mire azon is futottak és jól megjelentek a dolgok. Még memória korlátba is ütköztem, egyes funkciókat át kellett írnom. Bár elsősorban tanulási céllal csináltam ezt a konkrét játékot , azért nyilván hasznát is szívesen látnám ha van rá mód.
A jelenlegi változat csak lokálisan működik, ergo ha nincs hálózat akkor reklám sem fut, de játszani azt lehet vele. Hogy lehet ebből legjobban kihozni a pontenciálisan benne lévő 10 dollárt?
Látom pl. , hogy a MobAds nem engedélyez Donate gombot meg ilyesmiket. Van-e olyan platform ahová fel lehet tenni Donate gombos, vagy másképp PayPalos fizetést lehetővé tevő verziót és a mobilok is hajlandók megbízhatóként telepíteni az onnan származó cuccot?
Olvasgatok magam is ebben a témában, de ha van valakinek evvel kapcsolatban tapasztalata az érdekelne. -
Kutyauto
csendes tag
Bár megnézve ezt https://support.google.com/admob/answer/3016009?hl=en és ebből átkattintva ide https://support.google.com/admob/answer/7356431
és utána ennek a harmadik pontjából
https://developers.google.com/admob/android/quick-start
átkattintva ide: https://support.google.com/admob/answer/7356431
...ugyanoda jutunk, tehát az első gondolatomnak kellett volna jónak lennie, a két érték egyforma volna... csak úgy nem működik. A tesztelésre feltalált értékek közül csak felemás párosítással működik valahogy...
Megint megfájdult a fejem és belekavarodtam... :-/ pihi.Na közben ráakadtam erre a videóra: https://www.youtube.com/watch?v=rhiHNFkevgw
Kihagytam pár lépést, így már világosabb a kép. : -) -
Kutyauto
csendes tag
Köszi. Átnéztem, de végül máshonnét lett jó.
Én is és amennyire látom az általad adott linken kérdező valaki is úgy gondolom/gondoltam,
hogy a Manifest és az XML fájlban ugyanannak az ID számnak kellene szerepelnie, de úgy sehogy nem működik nekem.
A https://developers.google.com/admob/android/quick-start#import_the_mobile_ads_sdk leírás (továbbiak "leírás") alapján, a Manifest fájlban a szintén ott látható Sample AdMob app ID komment sorban megadott értékkel elindul a cucc és akkor jelenik meg hirdetés, ha a megjelenítő xml fálban a fene tudja már hol talált "/6499/example/banner" érték, vagy a leírásban a Banner típus implenetációjára tovább kattintva ott megadott "ca-app-pub-3940256099942544/6300978111" érték szerepel.
Ha egyforma értéket írok akkor vagy el sem indul, vagy elindul de nem jelenik meg a banner.
Szóval igazából most azt hiszem két külön szám kell. A Manifestbe az app id, az xml-be meg a formátumnak megfelelő fix érték. Majd most próbálom cseszegetni, kitalálni mikor és hogyan cserélődik a tartalom, meg megnézni mikor mi hívódik meg rajta.
Bár megnézve ezt https://support.google.com/admob/answer/3016009?hl=en és ebből átkattintva ide https://support.google.com/admob/answer/7356431
és utána ennek a harmadik pontjából
https://developers.google.com/admob/android/quick-start
átkattintva ide: https://support.google.com/admob/answer/7356431
...ugyanoda jutunk, tehát az első gondolatomnak kellett volna jónak lennie, a két érték egyforma volna... csak úgy nem működik. A tesztelésre feltalált értékek közül csak felemás párosítással működik valahogy...
Megint megfájdult a fejem és belekavarodtam... :-/ pihi. -
Kutyauto
csendes tag
Köszi. Átnéztem, de végül máshonnét lett jó.
Én is és amennyire látom az általad adott linken kérdező valaki is úgy gondolom/gondoltam,
hogy a Manifest és az XML fájlban ugyanannak az ID számnak kellene szerepelnie, de úgy sehogy nem működik nekem.
A https://developers.google.com/admob/android/quick-start#import_the_mobile_ads_sdk leírás (továbbiak "leírás") alapján, a Manifest fájlban a szintén ott látható Sample AdMob app ID komment sorban megadott értékkel elindul a cucc és akkor jelenik meg hirdetés, ha a megjelenítő xml fálban a fene tudja már hol talált "/6499/example/banner" érték, vagy a leírásban a Banner típus implenetációjára tovább kattintva ott megadott "ca-app-pub-3940256099942544/6300978111" érték szerepel.
Ha egyforma értéket írok akkor vagy el sem indul, vagy elindul de nem jelenik meg a banner.
Szóval igazából most azt hiszem két külön szám kell. A Manifestbe az app id, az xml-be meg a formátumnak megfelelő fix érték. Majd most próbálom cseszegetni, kitalálni mikor és hogyan cserélődik a tartalom, meg megnézni mikor mi hívódik meg rajta.
-
sztanozs
veterán
Sziasztok,
Első körben lassan elkészül a nagy mű. Utolsó lépésként integrálni szerettem volna bele egy Google AdMob banner formátumot. Elvileg sikerült is, fordul az egész.
Regisztráltam az AdMob -on , felvettem teszt eszköznek a laptopon futó emulátort.
Ettől függetlenül nem akartam a saját AdMob ID-mal tesztelni, hanem a https://admob-plus.github.io/docs/cordova/test-ads oldalon található
ca-app-pub-3940256099942544/6300978111 ID-t tettem bele a Manifestbe és az Activitybe is. Sajna nem indul el, Invalid ID üzenetet kapok rá.
Végül kipróbáltam a saját számommal is, de arra is ez jön. Az talán még amúgy sem aktív, mivel még nem töltöttem fel semmilyen app boltba a progit. Ezt reklámmal együtt való tesztelés után terveztem. Hogyan kéne ennek mennie? -
Kutyauto
csendes tag
Sziasztok,
Első körben lassan elkészül a nagy mű. Utolsó lépésként integrálni szerettem volna bele egy Google AdMob banner formátumot. Elvileg sikerült is, fordul az egész.
Regisztráltam az AdMob -on , felvettem teszt eszköznek a laptopon futó emulátort.
Ettől függetlenül nem akartam a saját AdMob ID-mal tesztelni, hanem a https://admob-plus.github.io/docs/cordova/test-ads oldalon található
ca-app-pub-3940256099942544/6300978111 ID-t tettem bele a Manifestbe és az Activitybe is. Sajna nem indul el, Invalid ID üzenetet kapok rá.
Végül kipróbáltam a saját számommal is, de arra is ez jön. Az talán még amúgy sem aktív, mivel még nem töltöttem fel semmilyen app boltba a progit. Ezt reklámmal együtt való tesztelés után terveztem. Hogyan kéne ennek mennie? -
Kutyauto
csendes tag
//Mire az alábbit megírtam, megoldódott.... Rendesen futtatva azért nem ment mert el volt írva a bekérő sor. Debug ablakban meg úgy látszik nem lehet kiértékeltetni ezt a kifejezést....
Sziasztok,
Vajh mi az oka annak, hogy a getString(id) nekem semmilyen formában nem megy?
Se a MainActivity onCreate -ben, se sehol máshol. Bárhol, bármilyen formában próbálom elérni, hibát ad vissza. A legkülönbözőbb elérésekkel, kontextekkel próbáltam. A string azonosítót feladja, aztán mégis az a hiba, hogy nem találja.
Most két sztring resource fájlom van, de default és egy (en) változat, de gondolom nem ez lehet a baj.
Órák óta szívok vele, amiket a neten találtam már próbáltam, de vagy nem is jött nekem elő a javasolt függvény, vagy ha mégis az is ugyanígy nem működött. Fragmentjeim is vannak.
-
sztanozs
veterán
Sziasztok tudom hogy új vagyok itt de csináltam egy videót arról mi is az én problémám magyarítottam egy androidos játékot és ezzel a játékkal volna egy kis gondom amit magyarítottam nézzétek meg ebből minden érthetővé válik mi is a gondom. Ködzönöm
https://mega.nz/file/1ER1GYTa#INnJk82tD2SRSX_uW8qkOV3sFaaYYC5Oj7mSYo0fJRg
es miert nem YT-ra raktad fel? miert kell filemegosztoval szenvedni?
-
fonixportal
csendes újonc
Sziasztok tudom hogy új vagyok itt de csináltam egy videót arról mi is az én problémám magyarítottam egy androidos játékot és ezzel a játékkal volna egy kis gondom amit magyarítottam nézzétek meg ebből minden érthetővé válik mi is a gondom. Ködzönöm
https://mega.nz/file/1ER1GYTa#INnJk82tD2SRSX_uW8qkOV3sFaaYYC5Oj7mSYo0fJRg
-
sztanozs
veterán
Évek óta használok egy moov nevű wearable edző rendszert, egy bokán hordható mozgásérzékelő és egy homlokpántba helyezett szívritmusfigyelő keveréke. A neve moov, nagyon pöpec, korát messze megelőzte, nagyon szeretem.
Nemrég telefont cseréltem és ekkor döbbentem rá, hogy a cég megszűnt, vagy legalábbis befejezték az eszközök forgalmazását és támogatását:
https://welcome.moov.cc/notice
a hozzávaló app nincs már fent a playstore-on. Az apkpure-on megtaláltam,
https://apkpure.com/moov-coach-guided-workouts/cc.moov.one/versions
letöltöttem, a szerver még működik, be tudtam logolni és le tudtam tölteni az adataimat is, és program beépülő edzésmoduljai is letöltődtek.
Eddig minden szép és jó, de mi lesz, ha lelövik majd a szervert? Működik-e majd vajon egyáltalán?
Kérdésem, hogy megoldható-e az app moddolása, úgy hogy online komponensek nélkül is működni tudjon, és vajon milyen nagyságrendű munka ez?
Egyáltalán mennyire moddolható forráskód nélkül egy ilyen app?
Nyilván nem azt gondolom, hogy én magam megcsinálnám, de lehet-e egyáltalán ilyen feladatra embert találni? (Nyilván nem ingyen - de kérdés, hogy megéri egyáltalán.)
Egyszer egyébként valaki picit moddolta már, részadatmentés céljából:
https://forum.xda-developers.com/t/app-mod-moov-coach-v5-1-4131.3948505/
de ez csak minimális változás volt.Le kellene sniffelni, hogy kommunikal a szerverrel es akkor lehetne csinalni hozza egy lokalis mock szervert DNS redirection-nel (vagy az apk hackelesevel).
Alternativakepp dekompilalni kell az apk-t es abbol kiturni, hogy hogyan kommunikal. -
Ogard
tag
Évek óta használok egy moov nevű wearable edző rendszert, egy bokán hordható mozgásérzékelő és egy homlokpántba helyezett szívritmusfigyelő keveréke. A neve moov, nagyon pöpec, korát messze megelőzte, nagyon szeretem.
Nemrég telefont cseréltem és ekkor döbbentem rá, hogy a cég megszűnt, vagy legalábbis befejezték az eszközök forgalmazását és támogatását:
https://welcome.moov.cc/notice
a hozzávaló app nincs már fent a playstore-on. Az apkpure-on megtaláltam,
https://apkpure.com/moov-coach-guided-workouts/cc.moov.one/versions
letöltöttem, a szerver még működik, be tudtam logolni és le tudtam tölteni az adataimat is, és program beépülő edzésmoduljai is letöltődtek.
Eddig minden szép és jó, de mi lesz, ha lelövik majd a szervert? Működik-e majd vajon egyáltalán?
Kérdésem, hogy megoldható-e az app moddolása, úgy hogy online komponensek nélkül is működni tudjon, és vajon milyen nagyságrendű munka ez?
Egyáltalán mennyire moddolható forráskód nélkül egy ilyen app?
Nyilván nem azt gondolom, hogy én magam megcsinálnám, de lehet-e egyáltalán ilyen feladatra embert találni? (Nyilván nem ingyen - de kérdés, hogy megéri egyáltalán.)
Egyszer egyébként valaki picit moddolta már, részadatmentés céljából:
https://forum.xda-developers.com/t/app-mod-moov-coach-v5-1-4131.3948505/
de ez csak minimális változás volt. -
Kutyauto
csendes tag
Szia! Pár tippet tudok adni. Kerüld a mutable listát és a mutable object-et. Final listával dolgozz, amiben data class-ok vannak kizárólag final property-vel. A sortby az eredeti listádat módosítja. Tehát van mellékhatása. A final list esetében viszont új listát kapsz, ha rendezed. Ha az elemeken valamit változtatnod kell használd a lista map metódusát és a data class copy metódusával módosítsd, amit kell. A mutable collection-öket inkább csak arra használd, hogy elemekkel töltsd fel őket. De de később már ne módosíts rajtuk. Mindig interface típussal térj vissza, sose mutable-lel.
Köszi a tippeket, utánaolvasok, ki fogom próbálni amiket nem ismerek belőle.
Sok mindennel játszom, kísérletezem amibe belebotlok... igazából csak a tapasztalás, tanulás kedvéért írogatom amiket most csinálok. Érdekes, hogy pár programsorral olyan funkciókat lehet megvalósítani, mint az írott szövegek felolvasása... ugyanakkor például éppen ebben jött elő, hogy ha előkészítem
tts = TextToSpeech(mycontext, ttsListener )
majd a listener initjében szeretném beállítani a default lokációnak megfelelő hangot ...
val voice = tts?.voices?.first { it.locale== Locale.getDefault() && !it.isNetworkConnectionRequired}
if (voice != null) {
tts?.setVoice(voice)
}
Hát a tts.voices egy 389 elemű lista, amelyből nekem csak az a 2-3 elem kell, ami megfelel néhány paraméternek. Ennek a listának a szűrése ( .filter{} ), keresni benne ( .first{} ) elemet a mostani tapasztalatom szerint baromi lassú... egyelőre nem találtam azt a módszert ami ne tűnne nagyon lassúnak.
A másik, hogy intiben beállítom a sebességet (alapból is amúgy is 1 lenne gondolom)
tts?.setSpeechRate(1f)
de ennek ellenére az első néhány megszólalás sokszor nagyon hadarós. Aztán lelassít a beállított normál tempóra. -
BE4GLE
senior tag
Van egy mutable listám, vannak benne objektumok.
Sorba rendezem a lista.sortBy{it.property} módszerrel, majd végigmennék rajta és végeznék írási műveleteket benne, és eközben egyszer csak elvész a beállított sorrend... ezzel bajlódok épp.
Eleve bajom volt, mert a benne lévő objektumok saját classból vannak és a saját propertyre akartam a sorrendet beállítani. Ez csak úgy működött, ha a classban a propertyt
@JvmField var Property:String =""
módon adtam meg, egyébként kaptam egy Illegal access hibát a sortBy-ra . Ezt kigugliztam, de most meg avval szivat, hogy elvész a beállított sorrend menet közben.Elfáradtam bele, csinálok egy kis fizikai melót...
Szia! Pár tippet tudok adni. Kerüld a mutable listát és a mutable object-et. Final listával dolgozz, amiben data class-ok vannak kizárólag final property-vel. A sortby az eredeti listádat módosítja. Tehát van mellékhatása. A final list esetében viszont új listát kapsz, ha rendezed. Ha az elemeken valamit változtatnod kell használd a lista map metódusát és a data class copy metódusával módosítsd, amit kell. A mutable collection-öket inkább csak arra használd, hogy elemekkel töltsd fel őket. De de később már ne módosíts rajtuk. Mindig interface típussal térj vissza, sose mutable-lel.
-
Kutyauto
csendes tag
Van egy mutable listám, vannak benne objektumok.
Sorba rendezem a lista.sortBy{it.property} módszerrel, majd végigmennék rajta és végeznék írási műveleteket benne, és eközben egyszer csak elvész a beállított sorrend... ezzel bajlódok épp.
Eleve bajom volt, mert a benne lévő objektumok saját classból vannak és a saját propertyre akartam a sorrendet beállítani. Ez csak úgy működött, ha a classban a propertyt
@JvmField var Property:String =""
módon adtam meg, egyébként kaptam egy Illegal access hibát a sortBy-ra . Ezt kigugliztam, de most meg avval szivat, hogy elvész a beállított sorrend menet közben.Elfáradtam bele, csinálok egy kis fizikai melót...
-
Kutyauto
csendes tag
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.
-
bandi0000
nagyúr
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 :-)Ezt kvázi neked megcsinálja a Room minden egyes app indításokor, màrmint a létrehozást, illetve ha vannak fix adataid, akkor a Room Appdatabase osztályba azokat is be lehet rakni, és minden létrehozáskor fel is tölti magának
-
Kutyauto
csendes tag
No volna egy hétköznapibb bajom is, talán vkinek ismerős...
Van a Studioban a Tools->Kotlin-> Kotlin REPL nevű eszköz... olyan command line féle
Ez nem indul el nekem, ezt írja:
`CommandLineWrapper` is ill-suited for launching apps on Java 9+.
If the run configuration uses "classpath file", please change it to "@argfile".
Otherwise, please contact support.
Ha a Run->Edit configurations-> Edit config templates menüben a Kotlin és Kotlin Script lapokon az Environment variables mezőbe beírom hogy classpath=@argfile , akkor elindul... de hiába tárolódik el, legközelebb megint ugyanaz a baj ismét be kell lépnem és leokézni hogy elinduljon. Amit lehetett már frissítettem. -
Kutyauto
csendes tag
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 :-) -
bandi0000
nagyúr
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.1 fokkal jobb, a lifecycleScope az az Activity-ben van, mert korábban az onCreate fv-t emlegetted, és ott ezzel tudnál suspend fun-t hívni/futtatni
-
Kutyauto
csendes tag
Nem az öregséggel vagy épp fiatalsàggal van a gond, hanem a tudás felépítésével
Kb ezt úgy tudom elképzelni, hogy valaki elolvassa, hogy hogyan kell falat festeni, aztàn ràjön, hogy nincs fal, akkor gyorsan utánanéz, aztán megint gond van, mert nincs vakolás, glettelés stb stb
Most ha minden áron működőképesre akarod kalapálni, akkor az onCreate-ben, csinálj egy ilyen blokkot:
lifecycleScope.launch{
}
És oda rakd be a suspend fv hívásodat
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. -
bandi0000
nagyúr
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. :-/
Nem az öregséggel vagy épp fiatalsàggal van a gond, hanem a tudás felépítésével
Kb ezt úgy tudom elképzelni, hogy valaki elolvassa, hogy hogyan kell falat festeni, aztàn ràjön, hogy nincs fal, akkor gyorsan utánanéz, aztán megint gond van, mert nincs vakolás, glettelés stb stb
Most ha minden áron működőképesre akarod kalapálni, akkor az onCreate-ben, csinálj egy ilyen blokkot:
lifecycleScope.launch{
}
És oda rakd be a suspend fv hívásodat
-
Kutyauto
csendes tag
Húha, itt azért elég sok alap dolog hiányzik...
Egyrészt ezt úgy szokás, hogy pl ha màr van viewModelled, akkor ott a mentésre hasznàlod a viewModelScope-ot, amivel ki tudsz menni az IO szálra, és ott elvégrzni a szükséges műveleteket
Visszatöltés hasonló képpen, de ha már adatbázis, és gondolom Room, akkor kézenfekvő a LiveData vagy Flow hasznàla
Apropó, mihez kell neked az async await ha màr coroutint használsz?
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. :-/
-
bandi0000
nagyúr
Sziasztok,
Már megint összerúgja a bokámat ez a többszálas korutinos dolog...
van a MainActivity aminek az OnCreate- jében akarok csinálni számos Room adatbázissal kapcsolatos dolgot. Egy része megy, amiknek a befejezésére nem kell várnom. (létrehozás, feltöltés csv fájlból default értékekkel stb...)
Viszont például kiolvasni már tárolt értékeket adatbázisból és UTÁNA azoknak megfelelően futtatni tovább az onCreate-t .... ez nem sikerül.
Mivel az async().await csak suspend függvényben működik, az onCreate meg nem engedi magát suspend deklarálni.Csűrtem és csavartam mindenfelé, de elakadtam vele...
Húha, itt azért elég sok alap dolog hiányzik...
Egyrészt ezt úgy szokás, hogy pl ha màr van viewModelled, akkor ott a mentésre hasznàlod a viewModelScope-ot, amivel ki tudsz menni az IO szálra, és ott elvégrzni a szükséges műveleteket
Visszatöltés hasonló képpen, de ha már adatbázis, és gondolom Room, akkor kézenfekvő a LiveData vagy Flow hasznàla
Apropó, mihez kell neked az async await ha màr coroutint használsz?
-
Kutyauto
csendes tag
Sziasztok,
Már megint összerúgja a bokámat ez a többszálas korutinos dolog...
van a MainActivity aminek az OnCreate- jében akarok csinálni számos Room adatbázissal kapcsolatos dolgot. Egy része megy, amiknek a befejezésére nem kell várnom. (létrehozás, feltöltés csv fájlból default értékekkel stb...)
Viszont például kiolvasni már tárolt értékeket adatbázisból és UTÁNA azoknak megfelelően futtatni tovább az onCreate-t .... ez nem sikerül.
Mivel az async().await csak suspend függvényben működik, az onCreate meg nem engedi magát suspend deklarálni.Csűrtem és csavartam mindenfelé, de elakadtam vele...
-
Kutyauto
csendes tag
Sziasztok,
Android Studioban próbálkozom egy alap tanfolyam után. Egyszerűbb kis appok már mennek.
Pályamódosításként kezdtem bele, de már látom hogy valószínűleg csak hobbi marad... azért csinálom, amikor szórakoztat, hátha lesz valami.
A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de például az emulátoron átállított nyelv, meg ilyesmi mindig elvész és az már macerásabb. Valamit nem jól csinálok, vagy hogy lehetne ezt elkerülni? (általában csak hibernálom a gépet amikor nem használom, de úgy vettem észre mindegy neki ha rendesen leállítom is.)"...A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de..."
Evvel kapcsolatban megírnám csak a rögzítés kedvéért, hogy mióta ( 8-10 napja talán ) átállítottam az emulátort arra, hogy teljesen külön ablakban induljon és fusson, azóta a fenti probléma nem fordult elő. -
Kutyauto
csendes tag
TL;DR: singleton viewmodel.
Igen, tudom, hogy ez antipattern - viszont egyetemen is ezt tanítják (nem mintha ez érv lenne persze...). Androidon jelenleg nincs jobb / szebb megoldás erre (tudtommal / tanáraim tudtával) - a saveinstancestate nem erre van -, úgyhogy sajnos ezzel kell menni. De ha valaki járatosabb a témában, ne tartsa magában
és persze nagyon könnyű rosszul használni, lásd például ezt (ez pont nem android, de a lényeg ugyanaz)Köszi, a viewModel lesz a jó kulcsszó. Tanultam az Activity életciklusokról és a saveInstanceState-ről, de nem emlékszem hogy a viewModelről lett volna szó. Persze nem kizárt, de nem emlékszem rá. A tanfolyam harmadik részét nem vettem meg, ott egész biztos előkerült volna. De mindegy, ennyi már elég, holnap majd utánaolvasok.
-
bandi0000
nagyúr
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
Igen, csak ugye feltételezem, ő nem nagyon ismeri az életciklusukat ezeknek, és ugye való igaz, hogy a fragment és viewModel is a memóriában tàrolja, mégis a fragment megszűnik, a viewModel nem, a forgatás alatt
-
thiclyoon
aktív tag
Miért kellene singleton viewModel? Az pont arra van, hogy config változás esetén, mint az elforgatás, megtartja az àllapotát
Önmagában nem is ajánlott singletont csinàlni a viewModelből, nàlunk egy bug volt miatta, mert az app bezárása esetén megmaradt a memóriában, viszont a lifecycle cuccok meg nem indultak újra
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
-
fatal`
titán
TL;DR: singleton viewmodel.
Igen, tudom, hogy ez antipattern - viszont egyetemen is ezt tanítják (nem mintha ez érv lenne persze...). Androidon jelenleg nincs jobb / szebb megoldás erre (tudtommal / tanáraim tudtával) - a saveinstancestate nem erre van -, úgyhogy sajnos ezzel kell menni. De ha valaki járatosabb a témában, ne tartsa magában
és persze nagyon könnyű rosszul használni, lásd például ezt (ez pont nem android, de a lényeg ugyanaz)A SaveInstanceState pont erre való.
-
bandi0000
nagyúr
TL;DR: singleton viewmodel.
Igen, tudom, hogy ez antipattern - viszont egyetemen is ezt tanítják (nem mintha ez érv lenne persze...). Androidon jelenleg nincs jobb / szebb megoldás erre (tudtommal / tanáraim tudtával) - a saveinstancestate nem erre van -, úgyhogy sajnos ezzel kell menni. De ha valaki járatosabb a témában, ne tartsa magában
és persze nagyon könnyű rosszul használni, lásd például ezt (ez pont nem android, de a lényeg ugyanaz)Miért kellene singleton viewModel? Az pont arra van, hogy config változás esetén, mint az elforgatás, megtartja az àllapotát
Önmagában nem is ajánlott singletont csinàlni a viewModelből, nàlunk egy bug volt miatta, mert az app bezárása esetén megmaradt a memóriában, viszont a lifecycle cuccok meg nem indultak újra
-
thiclyoon
aktív tag
Sziasztok,
BÚÉK mindenkinek!
Van az a dolog, hogy ha nem tiltom le a képernyő forgatást, akkor újraindul az egész cucc a forgatás után és elveszik az alkalmazás teljes állapota.
Egyelőre a fix orientációt használom, de kísérleteztem használni az "onSaveInstanceState"-et meg a párját...
Szimpla kulcs-érték párok mennek azzal nincs is baj, de van nekem egy rakás másféle objektumom is amiket meg kéne tartani.
Mint például egy ilyen
var MatrixDraw = mutableListOf<MyImageView>()
változót, amiben van egy lista spéci ImageView objektumokból, saját beállított propertykkel meg ilyesmi.
Az ilyenek kimentésére-visszatöltésére nem találtam működő megoldást sehol.
Nem tudtok olyasmi megoldást, aminek csak megadom a kulcsot, meg az értéket, aztán ő elvacakol a megfelelő metódus kiválasztásával, konvertál típust ha kell.... szóval megoldja a kimentést, visszatöltést bármire amit a memóriában találok ?TL;DR: singleton viewmodel.
Igen, tudom, hogy ez antipattern - viszont egyetemen is ezt tanítják (nem mintha ez érv lenne persze...). Androidon jelenleg nincs jobb / szebb megoldás erre (tudtommal / tanáraim tudtával) - a saveinstancestate nem erre van -, úgyhogy sajnos ezzel kell menni. De ha valaki járatosabb a témában, ne tartsa magában
és persze nagyon könnyű rosszul használni, lásd például ezt (ez pont nem android, de a lényeg ugyanaz) -
Kutyauto
csendes tag
Sziasztok,
BÚÉK mindenkinek!
Van az a dolog, hogy ha nem tiltom le a képernyő forgatást, akkor újraindul az egész cucc a forgatás után és elveszik az alkalmazás teljes állapota.
Egyelőre a fix orientációt használom, de kísérleteztem használni az "onSaveInstanceState"-et meg a párját...
Szimpla kulcs-érték párok mennek azzal nincs is baj, de van nekem egy rakás másféle objektumom is amiket meg kéne tartani.
Mint például egy ilyen
var MatrixDraw = mutableListOf<MyImageView>()
változót, amiben van egy lista spéci ImageView objektumokból, saját beállított propertykkel meg ilyesmi.
Az ilyenek kimentésére-visszatöltésére nem találtam működő megoldást sehol.
Nem tudtok olyasmi megoldást, aminek csak megadom a kulcsot, meg az értéket, aztán ő elvacakol a megfelelő metódus kiválasztásával, konvertál típust ha kell.... szóval megoldja a kimentést, visszatöltést bármire amit a memóriában találok ? -
Kutyauto
csendes tag
-
Zsoxx
őstag
Rámész az emulátor menüjén a 3 pöttyre, és a Virtual sensors lapon tologatod az egyik csúszkát gyorsan ide-oda.
-
Kutyauto
csendes tag
Tudja valaki hogyan lehet emulálni a mobil megrázását (shake) az emulátoron ?
CTRL+M kombinációt olvastam, de nekem a CTRL csak két pöttyöt pakol fel a képernyőre, azokat sem tudtam megfejteni mire volnának valók, de rázást nem sikerült előállítani sehogy. -
Kutyauto
csendes tag
Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni?
Meg is válaszoltad
ha ugyanúgy akarod őket behúzni, mint más függőségeket, akkor pontosan ugyanúgy kell őket kezelned. De amúgy valahogy úgy néz ki ez a legtöbb esetben, hogy ha organikusan növi ki magát, akkor
- elkezded észrevenni az ismétlődéseket, újrahasználható részeket (ezzel meg is vagy),
- ezeket összeszeded, bővítgeted, és projektenként testreszabod. Itt még általában csak egy fájlhalmazról beszélünk, amiket manuálisan behúzol a projektekbe. Érdemes több projektben kipróbálni őket, hogy 1, hasznosak-e annyira, hogy tényleg ki kell őket szervezni és 2, a hibák jobban előjöjjenek -> érdemes lehet teszteket is írni, ha olyan kódról van szó,
- a fájlhalmaz bővülésével jöhet a gondolat, hogy ha már nem 2 függvényről van szó, akkor érdemes lenne verziókezelni -> összeszeded a dolgokat, és
- publikálod a kódot. Erre van sok leírás, például ez jónak tűnik. Elsőre bonyolultnak tűnhet, de nem nehéz; GitHub kell hozzá és ennyi igazábólKöszi a linket, hasznos lesz.
Valamikor tudtam írni elég szakszerű felépítésű dolgokat.
Talán ebben az új rendszerben is eljutok valami értelmezhető szintre előbb-utóbb. -
thiclyoon
aktív tag
Van anyagom az enumra, volt róla szó de nekem újdonság, nem is jutott eszembe.
Most az a szituáció, hogy ugyanazon a gépen játszom. Nincs élő partner, a gép lép egy timerrel, aztán megint én. A gép lépése után ugyanúgy elindulnak az animációk amikor olyan a szitu. És én úgy veszem észre, hogy ha egymás után elindítok 6 db animációt akkor sosem fogom tudni hogy melyik ért véget utoljára, hogy az kapcsolja majd vissza a lépés lehetőségét.(ezt próbáltam áthidalni az AnimCount változóval) Ráadásul úgy veszem észre ha az AnimationEnd metódusban visszaállítom a lépés lehetőségét (Clickable=1 ), majd rögtön köv. sorban eltüntetem (Invisible) a kiesett ImageView-t... hiába... már rég le van futva a két sor, mikor (ha elég gyors vagyok) még mindig rá tudok bökni az elemre amire már nem volna szabad tudnom rábökni. Vagy elvétek valami sorrendet, logikát, vagy ez ilyen... nem tudom.
Lényegében most megoldottam hibátlanra egy plusz timer beépítésével és túl is gondolom bizonyos szempontból, hiszen ha hálózaton másik játékossal fog menni a játék (amit célom lesz beépíteni NodeJS alapon) akkor bőven lesz idő mindennek lefutnia míg a kommunikáció lezajlik.
Amúgy is minden nap ezer dolog merül fel amibe belebotlok és nem értem de meg kell tanulnom hogy így van és kész.
pl. van a gombnak strikeColor meg strikeWidth tulajdonsága amit az xml-ben be tudok állítani de futásidőben már nem érhetők el. Vagy hogy használni tudom a setBackColor függvényt, de lekérdezni a gomb aktuális színét csak egy külön furmánykodással lehet. Persze ezt a furmánykodást beépíthetném egy saját funkcióba, ilyenekből épül aztán az embernek egy saját függvénykönyvtára és kész.
Apropó, az pl. nem lett kibeszélve a tanfolyamon, hogyan épül fel ideális esetben egy ilyen rendszer. Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni? Hogy ugyanúgy lehessen aztán behúzni őket egy új projektbe saját gépről, mint a többi függőségeket.
Vágom a fát szorgosan, de nem látok a szálló forgácstól...
Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni?
Meg is válaszoltad
ha ugyanúgy akarod őket behúzni, mint más függőségeket, akkor pontosan ugyanúgy kell őket kezelned. De amúgy valahogy úgy néz ki ez a legtöbb esetben, hogy ha organikusan növi ki magát, akkor
- elkezded észrevenni az ismétlődéseket, újrahasználható részeket (ezzel meg is vagy),
- ezeket összeszeded, bővítgeted, és projektenként testreszabod. Itt még általában csak egy fájlhalmazról beszélünk, amiket manuálisan behúzol a projektekbe. Érdemes több projektben kipróbálni őket, hogy 1, hasznosak-e annyira, hogy tényleg ki kell őket szervezni és 2, a hibák jobban előjöjjenek -> érdemes lehet teszteket is írni, ha olyan kódról van szó,
- a fájlhalmaz bővülésével jöhet a gondolat, hogy ha már nem 2 függvényről van szó, akkor érdemes lenne verziókezelni -> összeszeded a dolgokat, és
- publikálod a kódot. Erre van sok leírás, például ez jónak tűnik. Elsőre bonyolultnak tűnhet, de nem nehéz; GitHub kell hozzá és ennyi igazából -
Kutyauto
csendes tag
Ha minden igaz, a
GuestTheNext: Inta játék állapota. Én áttérnékenumhasználatára (bár azInttel is megoldható minden, csak szebb, könnyebb lenne előbbivel - ha nem ismered, nem gond, maradhat, ahogy van), és 4 állapotot hoznék létre: egyik lép, másik lép (ez megvolt nálad is 0 és 1 értékekkel), egyik fog jönni (az animáció után), másik fog jönni (az animáció után)(Nem tudom így mennyire világos, majd írok pszeudokódot ha úgy van. A koncepció az, hogy nem a tappolhatóságot állítod, hanem állapotokkal modellezel; amint tappolt a user, átállítod olyanra, hogy ne érdekeljen, ha tappol)
Van anyagom az enumra, volt róla szó de nekem újdonság, nem is jutott eszembe.
Most az a szituáció, hogy ugyanazon a gépen játszom. Nincs élő partner, a gép lép egy timerrel, aztán megint én. A gép lépése után ugyanúgy elindulnak az animációk amikor olyan a szitu. És én úgy veszem észre, hogy ha egymás után elindítok 6 db animációt akkor sosem fogom tudni hogy melyik ért véget utoljára, hogy az kapcsolja majd vissza a lépés lehetőségét.(ezt próbáltam áthidalni az AnimCount változóval) Ráadásul úgy veszem észre ha az AnimationEnd metódusban visszaállítom a lépés lehetőségét (Clickable=1 ), majd rögtön köv. sorban eltüntetem (Invisible) a kiesett ImageView-t... hiába... már rég le van futva a két sor, mikor (ha elég gyors vagyok) még mindig rá tudok bökni az elemre amire már nem volna szabad tudnom rábökni. Vagy elvétek valami sorrendet, logikát, vagy ez ilyen... nem tudom.
Lényegében most megoldottam hibátlanra egy plusz timer beépítésével és túl is gondolom bizonyos szempontból, hiszen ha hálózaton másik játékossal fog menni a játék (amit célom lesz beépíteni NodeJS alapon) akkor bőven lesz idő mindennek lefutnia míg a kommunikáció lezajlik.
Amúgy is minden nap ezer dolog merül fel amibe belebotlok és nem értem de meg kell tanulnom hogy így van és kész.
pl. van a gombnak strikeColor meg strikeWidth tulajdonsága amit az xml-ben be tudok állítani de futásidőben már nem érhetők el. Vagy hogy használni tudom a setBackColor függvényt, de lekérdezni a gomb aktuális színét csak egy külön furmánykodással lehet. Persze ezt a furmánykodást beépíthetném egy saját funkcióba, ilyenekből épül aztán az embernek egy saját függvénykönyvtára és kész.
Apropó, az pl. nem lett kibeszélve a tanfolyamon, hogyan épül fel ideális esetben egy ilyen rendszer. Saját, több külön projektben újra és újra felhasználni tervezett osztályokat, funkciókat hová kell tenni? Hogy ugyanúgy lehessen aztán behúzni őket egy új projektbe saját gépről, mint a többi függőségeket.
Vágom a fát szorgosan, de nem látok a szálló forgácstól...
-
Kutyauto
csendes tag
Hát én tényleg csak kezdő vagyok ebben a rendszerben, nem egy mutatni való minőségű kód ez. Mindent kipróbálok ami szembe jön, aztán ha már megtaláltam, kitököltem akkor sem törlöm ki ha mégsem akarom használni, csak kikommentelem. (Mint pittyegés, wav lejátszás, rezegtetés meg effélék) Szóval katyvasz még.
A lényeg, hogy van egy fragmentem, abban egy frame layout.
Ebbe a layoutba futás idő alatt kóddal helyezek el egy csomó egyforma ImageView objektumot. A végeredmény úgy néz ki kb. mint egy sakk tábla.
Minden ImageView ugyanazt a timer kódot futtatja kattintáskor. Mindenféle kiértékelések , és akár hat elemen is animációk futtatódnak. Ennek mind le kéne mennie és a köv. kattintásnak csak ezek után kéne lehetővé válnia. Leegyszerűsítve, áttekinthetősítve ilyen volna:var Clickable:Int = 1 // segéd változó ez jelzi, hogy kattinthatók-e éppen az elemek.
var AnimCount = 0 // segéd változó amiből az utoljára befejeződő animációnak látnia kéne, // hogy a Clickable-t neki kell visszaállítania 1-re.
var ViewList: MutableList<View> = mutableListOf<View>()
// segéd lista amit kezelgetek - a gépi válaszlépés használja.
var GuestTheNext:Int =1 //ki lép következőre ?/*ImageView click kód*/
ImageView.onClickListener{
if (Clickable==1){
onClick()
} // onClickListener vége
}fun onClick()
{
Clickable = 0
/* itt vannak még egyéb dolgok, változókat állítok, képeket cserélek vezérléseken, ilyesmik*/
click_timer.start() // itt indulna egy timer, ami kis időt ad a usernek érzékelni a képernyőn //történt változást, majd értékel és visszaállítja a képernyőt várva a köv. //lépést.
}
/*ImageView click kód vége*/
/* timer kód*/
val click_timer = object : CountDownTimer(500, 500) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
/*animáció meghívása két adott objektumra*/
Remanim(ActiveView1)
Remanim(ActiveView2)
/* ... itt egy csomó egyéb művelet, elágazás stb.*/
/*animáció meghívása további objektumokra*/
Remanim(fw_binding!!.imageViewB)
Remanim(fw_binding!!.imageViewC)
Remanim(fw_binding!!.imageViewJ)
} //OnFinish vége
} /*timer kód vége*//*Az animáció*/
fun Remanim(view: View) {
view.animate()
.setDuration(500)
.rotation(360f)
.translationY(0f)
.alpha(0.0f)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
super.onAnimationStart(animation)
AnimCount++
}
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)
/* itt vannak még dolgok, pontszám kiírása ilyesmik*/
if (AnimCount <= 1) {Clickable = 1}
AnimCount--
view.visibility = View.INVISIBLE
ViewList.remove(view)
if (GuestTheNext == 1) GuestTheNext= 0 else GuestTheNext= 1 //játékost cserél
if (GuestTheNext==1){
guest_timer.start() // itt hívódna a vendég játékos, illetve a gépi válasz lépése. tulképp ő is az // onClick() függvényt fogja hívni, csak másik View paraméterrel.
}
}
})
Lényegében a változókkal variálás nélkül simán szét lehet kattintani a képernyőt míg a timer meg az animációk futnak. Végső soron ezzel a variálással sem tökéletes.
Ha elég vadul tapizom a képernyőt akkor szétesik a kód, kétszer egymás után is ugyanaz a játékos tud lépni.Végül is talán feleslegesen bonyolultan csináltam. Működik, de még mindig meg lehet bolondítani.
Csak az AnimationEnd állítja vissza a kattinthatóságot, de még javában forognak az animációk a képernyőn amikor már rá tudok kattintani és lefut ismét a click. -
thiclyoon
aktív tag
Hát én tényleg csak kezdő vagyok ebben a rendszerben, nem egy mutatni való minőségű kód ez. Mindent kipróbálok ami szembe jön, aztán ha már megtaláltam, kitököltem akkor sem törlöm ki ha mégsem akarom használni, csak kikommentelem. (Mint pittyegés, wav lejátszás, rezegtetés meg effélék) Szóval katyvasz még.
A lényeg, hogy van egy fragmentem, abban egy frame layout.
Ebbe a layoutba futás idő alatt kóddal helyezek el egy csomó egyforma ImageView objektumot. A végeredmény úgy néz ki kb. mint egy sakk tábla.
Minden ImageView ugyanazt a timer kódot futtatja kattintáskor. Mindenféle kiértékelések , és akár hat elemen is animációk futtatódnak. Ennek mind le kéne mennie és a köv. kattintásnak csak ezek után kéne lehetővé válnia. Leegyszerűsítve, áttekinthetősítve ilyen volna:var Clickable:Int = 1 // segéd változó ez jelzi, hogy kattinthatók-e éppen az elemek.
var AnimCount = 0 // segéd változó amiből az utoljára befejeződő animációnak látnia kéne, // hogy a Clickable-t neki kell visszaállítania 1-re.
var ViewList: MutableList<View> = mutableListOf<View>()
// segéd lista amit kezelgetek - a gépi válaszlépés használja.
var GuestTheNext:Int =1 //ki lép következőre ?/*ImageView click kód*/
ImageView.onClickListener{
if (Clickable==1){
onClick()
} // onClickListener vége
}fun onClick()
{
Clickable = 0
/* itt vannak még egyéb dolgok, változókat állítok, képeket cserélek vezérléseken, ilyesmik*/
click_timer.start() // itt indulna egy timer, ami kis időt ad a usernek érzékelni a képernyőn //történt változást, majd értékel és visszaállítja a képernyőt várva a köv. //lépést.
}
/*ImageView click kód vége*/
/* timer kód*/
val click_timer = object : CountDownTimer(500, 500) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
/*animáció meghívása két adott objektumra*/
Remanim(ActiveView1)
Remanim(ActiveView2)
/* ... itt egy csomó egyéb művelet, elágazás stb.*/
/*animáció meghívása további objektumokra*/
Remanim(fw_binding!!.imageViewB)
Remanim(fw_binding!!.imageViewC)
Remanim(fw_binding!!.imageViewJ)
} //OnFinish vége
} /*timer kód vége*//*Az animáció*/
fun Remanim(view: View) {
view.animate()
.setDuration(500)
.rotation(360f)
.translationY(0f)
.alpha(0.0f)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
super.onAnimationStart(animation)
AnimCount++
}
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)
/* itt vannak még dolgok, pontszám kiírása ilyesmik*/
if (AnimCount <= 1) {Clickable = 1}
AnimCount--
view.visibility = View.INVISIBLE
ViewList.remove(view)
if (GuestTheNext == 1) GuestTheNext= 0 else GuestTheNext= 1 //játékost cserél
if (GuestTheNext==1){
guest_timer.start() // itt hívódna a vendég játékos, illetve a gépi válasz lépése. tulképp ő is az // onClick() függvényt fogja hívni, csak másik View paraméterrel.
}
}
})
Lényegében a változókkal variálás nélkül simán szét lehet kattintani a képernyőt míg a timer meg az animációk futnak. Végső soron ezzel a variálással sem tökéletes.
Ha elég vadul tapizom a képernyőt akkor szétesik a kód, kétszer egymás után is ugyanaz a játékos tud lépni.Ha minden igaz, a
GuestTheNext: Inta játék állapota. Én áttérnékenumhasználatára (bár azInttel is megoldható minden, csak szebb, könnyebb lenne előbbivel - ha nem ismered, nem gond, maradhat, ahogy van), és 4 állapotot hoznék létre: egyik lép, másik lép (ez megvolt nálad is 0 és 1 értékekkel), egyik fog jönni (az animáció után), másik fog jönni (az animáció után)(Nem tudom így mennyire világos, majd írok pszeudokódot ha úgy van. A koncepció az, hogy nem a tappolhatóságot állítod, hanem állapotokkal modellezel; amint tappolt a user, átállítod olyanra, hogy ne érdekeljen, ha tappol)
-
Kutyauto
csendes tag
Egyébként más is küzd ilyennel, ez itt erről szól :
https://stackoverflow.com/questions/10987633/disable-all-touch-screen-interactions-while-animation
De igazából nem így kéne megoldani, hanem ráérezni ennek a többszálúságnak a lényegére és úgy szervezni a kódot, hogy jó legyen.
Gondoltam aztán, hogy csinálok saját osztályt a FrameLayout ból aminek csinálok setClickableAll(mode:Int) metódust ami minden elemre beállítja amit paraméterbe kap ilyesmi ciklussal... de a programból hozzáadott elemeket nem találtam meg a getChildCount()-tal... mintha nem is volnának.
for (int i = 1, i < layout.getChildCount(), i++) {
TableRow row = (TableRow) layout.getChildAt(i)
row.setClickable(false)
}
No, szóval küzdök mint malac a jégen... Ilyen hosszadalmas és kevéssé egzakt problémákkal nem terhelnélek titeket, de ha lesz könnyen azonosítható kérdésem, akkor mindenképp megjelenek vele...
-
Kutyauto
csendes tag
Hát én tényleg csak kezdő vagyok ebben a rendszerben, nem egy mutatni való minőségű kód ez. Mindent kipróbálok ami szembe jön, aztán ha már megtaláltam, kitököltem akkor sem törlöm ki ha mégsem akarom használni, csak kikommentelem. (Mint pittyegés, wav lejátszás, rezegtetés meg effélék) Szóval katyvasz még.
A lényeg, hogy van egy fragmentem, abban egy frame layout.
Ebbe a layoutba futás idő alatt kóddal helyezek el egy csomó egyforma ImageView objektumot. A végeredmény úgy néz ki kb. mint egy sakk tábla.
Minden ImageView ugyanazt a timer kódot futtatja kattintáskor. Mindenféle kiértékelések , és akár hat elemen is animációk futtatódnak. Ennek mind le kéne mennie és a köv. kattintásnak csak ezek után kéne lehetővé válnia. Leegyszerűsítve, áttekinthetősítve ilyen volna:var Clickable:Int = 1 // segéd változó ez jelzi, hogy kattinthatók-e éppen az elemek.
var AnimCount = 0 // segéd változó amiből az utoljára befejeződő animációnak látnia kéne, // hogy a Clickable-t neki kell visszaállítania 1-re.
var ViewList: MutableList<View> = mutableListOf<View>()
// segéd lista amit kezelgetek - a gépi válaszlépés használja.
var GuestTheNext:Int =1 //ki lép következőre ?/*ImageView click kód*/
ImageView.onClickListener{
if (Clickable==1){
onClick()
} // onClickListener vége
}fun onClick()
{
Clickable = 0
/* itt vannak még egyéb dolgok, változókat állítok, képeket cserélek vezérléseken, ilyesmik*/
click_timer.start() // itt indulna egy timer, ami kis időt ad a usernek érzékelni a képernyőn //történt változást, majd értékel és visszaállítja a képernyőt várva a köv. //lépést.
}
/*ImageView click kód vége*/
/* timer kód*/
val click_timer = object : CountDownTimer(500, 500) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
/*animáció meghívása két adott objektumra*/
Remanim(ActiveView1)
Remanim(ActiveView2)
/* ... itt egy csomó egyéb művelet, elágazás stb.*/
/*animáció meghívása további objektumokra*/
Remanim(fw_binding!!.imageViewB)
Remanim(fw_binding!!.imageViewC)
Remanim(fw_binding!!.imageViewJ)
} //OnFinish vége
} /*timer kód vége*//*Az animáció*/
fun Remanim(view: View) {
view.animate()
.setDuration(500)
.rotation(360f)
.translationY(0f)
.alpha(0.0f)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
super.onAnimationStart(animation)
AnimCount++
}
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)
/* itt vannak még dolgok, pontszám kiírása ilyesmik*/
if (AnimCount <= 1) {Clickable = 1}
AnimCount--
view.visibility = View.INVISIBLE
ViewList.remove(view)
if (GuestTheNext == 1) GuestTheNext= 0 else GuestTheNext= 1 //játékost cserél
if (GuestTheNext==1){
guest_timer.start() // itt hívódna a vendég játékos, illetve a gépi válasz lépése. tulképp ő is az // onClick() függvényt fogja hívni, csak másik View paraméterrel.
}
}
})
Lényegében a változókkal variálás nélkül simán szét lehet kattintani a képernyőt míg a timer meg az animációk futnak. Végső soron ezzel a variálással sem tökéletes.
Ha elég vadul tapizom a képernyőt akkor szétesik a kód, kétszer egymás után is ugyanaz a játékos tud lépni. -
thiclyoon
aktív tag
Most épp egy játékot csinálok, amiben vannak animációk, timeres dolgok is. Egy-egy lépés után le kéne fussanak a dolgok és mindaddig nem kéne szabad legyen bele kattintani a képernyőbe.
Evvel szívok, próbálom változóval megoldani no de mindenhová ifeket írni elég macerás. És még csak nem is nagyon működik, folyton összeakadnak a rutinok egymással. Nem találtam olyat, amivel egy lépésben tiltani tudnám az interakciót. Marha szokatlan nekem ez a többszálú működés. Sokat Foxproztam, ott szépen egymás után futottak a dolgok, meg kellett szenvedni ha nem úgy akartad. Itt meg fordítva...Ha gondolod, dobj be releváns kódot az ilyen kérdésekhez, szerintem azzal könnyebb válaszolni. Ilyen kód lehet ebben az esetben pl. egy adott animáció kódja - a lényeg, hogy minél kevesebbet másolj be, de közben legyen elég segítség a válaszolónak
-
Kutyauto
csendes tag
-
Zsoxx
őstag
Most épp egy játékot csinálok, amiben vannak animációk, timeres dolgok is. Egy-egy lépés után le kéne fussanak a dolgok és mindaddig nem kéne szabad legyen bele kattintani a képernyőbe.
Evvel szívok, próbálom változóval megoldani no de mindenhová ifeket írni elég macerás. És még csak nem is nagyon működik, folyton összeakadnak a rutinok egymással. Nem találtam olyat, amivel egy lépésben tiltani tudnám az interakciót. Marha szokatlan nekem ez a többszálú működés. Sokat Foxproztam, ott szépen egymás után futottak a dolgok, meg kellett szenvedni ha nem úgy akartad. Itt meg fordítva...Webuni-ra jártál?
-
Kutyauto
csendes tag
Most épp egy játékot csinálok, amiben vannak animációk, timeres dolgok is. Egy-egy lépés után le kéne fussanak a dolgok és mindaddig nem kéne szabad legyen bele kattintani a képernyőbe.
Evvel szívok, próbálom változóval megoldani no de mindenhová ifeket írni elég macerás. És még csak nem is nagyon működik, folyton összeakadnak a rutinok egymással. Nem találtam olyat, amivel egy lépésben tiltani tudnám az interakciót. Marha szokatlan nekem ez a többszálú működés. Sokat Foxproztam, ott szépen egymás után futottak a dolgok, meg kellett szenvedni ha nem úgy akartad. Itt meg fordítva... -
Kutyauto
csendes tag
Hát jó eddig nem lett. Azt vettem észre, hogy amikor elsőre nem bírom elindítani olyankor beragad a memóriába egy emulator.exe meg egy emulator64-crash-service.exe és egy qemu-system-x86_64.exe nevű program. Ha azokat mind kilövöm, akkor következő manuális indításra elindul rendesen.
-
Kutyauto
csendes tag
-
Zsoxx
őstag
-
Kutyauto
csendes tag
-
Zsoxx
őstag
-
Dilikutya
félisten
Ismerem az alkotókat
nincs közöm a projekthez, de valamennyire rálátok a dolgokra. Van konkrét kérdésed esetleg? Általánosságban nehéz beszélni, nagyon sok minden függ tőled (hogy csak két végletet említsek, nem mindegy, hogy a pár kommenttel feljebb is előjött "szeretném átképezni magam, mit tegyek?" szintről indulsz, vagy van 2 mérnöki / IT diplomád, eddig backendeztél, és mostantól szeretnél frontendezni)
Amit mindenképp érdemes tudni - bármilyen szintről is jön az ember -, hogy egy online kurzus elvégzése után (legyen az bármilyen jó / rossz) nem lesz fejlesztő, meg a cikkekben sokszor clickbaitelt "milliós fizetések" sem fognak bekopogni.
Azért is krédezem a fentit, mert ha valaki az alapoktól indul, és nagyok az elvárásai (nem saját hibája miatt, ahogy említettem, a hírekben is például gyakran felfújt dolgokat lehet látni), az - szerintem - minden online tanfolyamban csalódni fog, és az elköltött 3,5 forintot is bánni fogja. Ha meg profi / hozzáértő, akkor nem gondolnám, hogy egy magyar nyelvű kurzusra akarna támaszkodni. De mindig van edge case, olyan kivétel, amire nem is gondolnék
Nem rontva az üzletet az szerintem mindenki számára nyilvánvaló, hogy ha munkaszinten akar ezzel foglalkozni valaki, akkor az angol elengedhetetlen számára (ha valakinek ez új, akkor most már tudja
). Angol nyelvű kurzusból meg rengeteg van, ahol nem csak egy random magyar fórumozó véleményét tudod kikérni. Teljesen véletlenszerűen felcsaptam a Udemy-t, beírtam hogy "Angular", az első találat 176922 értékeléssel rendelkezik és 646944 tanuló vette meg. 177k értékelést átolvasni persze végtelen idő lenne, de van hozzá x/5-ös szummázott értékelés is nyilván. Ehhez meg nem árt tudni, hogy az Udemy trükkös, és ki kell várni az akciót - de ha még úgy is sok lenne a kb. 15 dollár / nincs kedve az embernek kivárni, akkor nem kell sok leleményesség a let's say virágbolti verzióhoz.Nem tervezek átképzést.
Csak bele akarok kóstolni, kíváncsi vagyok. Tudom, hogy nem egy ilyen anyag a csoda.
IT-s vagyok, de a programozáshoz amúgy annyi közöm van, amit fősulin tanultam, főleg C#, kis php. 
-
thiclyoon
aktív tag
Ismerem az alkotókat
nincs közöm a projekthez, de valamennyire rálátok a dolgokra. Van konkrét kérdésed esetleg? Általánosságban nehéz beszélni, nagyon sok minden függ tőled (hogy csak két végletet említsek, nem mindegy, hogy a pár kommenttel feljebb is előjött "szeretném átképezni magam, mit tegyek?" szintről indulsz, vagy van 2 mérnöki / IT diplomád, eddig backendeztél, és mostantól szeretnél frontendezni)
Amit mindenképp érdemes tudni - bármilyen szintről is jön az ember -, hogy egy online kurzus elvégzése után (legyen az bármilyen jó / rossz) nem lesz fejlesztő, meg a cikkekben sokszor clickbaitelt "milliós fizetések" sem fognak bekopogni.
Azért is krédezem a fentit, mert ha valaki az alapoktól indul, és nagyok az elvárásai (nem saját hibája miatt, ahogy említettem, a hírekben is például gyakran felfújt dolgokat lehet látni), az - szerintem - minden online tanfolyamban csalódni fog, és az elköltött 3,5 forintot is bánni fogja. Ha meg profi / hozzáértő, akkor nem gondolnám, hogy egy magyar nyelvű kurzusra akarna támaszkodni. De mindig van edge case, olyan kivétel, amire nem is gondolnék
Nem rontva az üzletet az szerintem mindenki számára nyilvánvaló, hogy ha munkaszinten akar ezzel foglalkozni valaki, akkor az angol elengedhetetlen számára (ha valakinek ez új, akkor most már tudja
). Angol nyelvű kurzusból meg rengeteg van, ahol nem csak egy random magyar fórumozó véleményét tudod kikérni. Teljesen véletlenszerűen felcsaptam a Udemy-t, beírtam hogy "Angular", az első találat 176922 értékeléssel rendelkezik és 646944 tanuló vette meg. 177k értékelést átolvasni persze végtelen idő lenne, de van hozzá x/5-ös szummázott értékelés is nyilván. Ehhez meg nem árt tudni, hogy az Udemy trükkös, és ki kell várni az akciót - de ha még úgy is sok lenne a kb. 15 dollár / nincs kedve az embernek kivárni, akkor nem kell sok leleményesség a let's say virágbolti verzióhoz. -
Dilikutya
félisten
-
Zsoxx
őstag
Sziasztok,
Android Studioban próbálkozom egy alap tanfolyam után. Egyszerűbb kis appok már mennek.
Pályamódosításként kezdtem bele, de már látom hogy valószínűleg csak hobbi marad... azért csinálom, amikor szórakoztat, hátha lesz valami.
A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de például az emulátoron átállított nyelv, meg ilyesmi mindig elvész és az már macerásabb. Valamit nem jól csinálok, vagy hogy lehetne ezt elkerülni? (általában csak hibernálom a gépet amikor nem használom, de úgy vettem észre mindegy neki ha rendesen leállítom is.)Nálam sosem volt ilyen probléma. Van elég helyed a megfelelő meghajtón? Egy emulátor kb. 9 GB-ot foglal. Szerintem erősen memóriaigényes is.
-
Kutyauto
csendes tag
Sziasztok,
Android Studioban próbálkozom egy alap tanfolyam után. Egyszerűbb kis appok már mennek.
Pályamódosításként kezdtem bele, de már látom hogy valószínűleg csak hobbi marad... azért csinálom, amikor szórakoztat, hátha lesz valami.
A kérdés: A benne lévő AVD emulátort használom. Sajna szinte minden nap törölni kell és újra kell telepíteni , mert megdöglik, nem tud elindulni. Jó, hogy pár kattintás, de például az emulátoron átállított nyelv, meg ilyesmi mindig elvész és az már macerásabb. Valamit nem jól csinálok, vagy hogy lehetne ezt elkerülni? (általában csak hibernálom a gépet amikor nem használom, de úgy vettem észre mindegy neki ha rendesen leállítom is.) -
prime_adam
aktív tag
Akinek van már Google Play developer accountja tudna segíteni pár kérdésben a regisztráció kapcsán? Nem akarom elszúrni, mert folyamatosan fizethetek érte.
Igazából a Google Dev account és Google account közötti kapcsolat nekem nem tiszta. Ami fontos, hogy céges accountot nyitnék.
1. Azt írja, hogy a Dev account és Google account végérvényesen összetartozik és nem változtatható. Egy business dev accountnál, ahol több felhasználó is lehet ez nagyon rossz gyakorlatnak tűnik, hiszen ha eltűnik a fő felhasználó az összes business adat és app megy a kukába. Vagy valamit nem jól értelmezek?
2. A fenti gondolatmeneten létrehozok egy új google fiókot a business számára (más nevén, mert nem az enyém a business), de szeretném használni, mert én fogom feltölteni és kezelni a cuccokat, akkor attól félek, hogy bannol a google több fiókhasználat miatt.
3. Végezetül amikor hitelesítésnél kérik a személyit, most a google account adatait akarják ellenőrizni vagy a play developer-nél megadott adatokat?Teljesen kavarnak tűnik nekem ez az egész, mintha összemosnák az egyéni és céges dolgokat.

-
prime_adam
aktív tag
Köszi szépen! Elkezdtem próbálkozni, aztán meglátjuk. Egyébként is nagy félelmem, hogy elutasítják, mert nem eléggé "app"-os, bár ha sikerülne ezt a natív fizetést integrálni talán elfogadnák valami hibrid appnak.
-
thiclyoon
aktív tag
Köszi a választ!
A külső linkek kezelését megnéztem és valóban találtam rá megoldást (legalábbis elméletileg).
A fizetési rendszerrel viszont továbbra is vannak bajaim. Ahogy nézem az SDK-t úgy tudom használni, hogy van egy "natív gomb", ami fizetésre megjelenít egy réteget az app felett. Ez egyébként tök jó lenne, csak a fizetési gomb már szerepel a webes verzióban, elküld egy kérést a backendnek, az elindítja a stripe fizetést és a frontend visszakap egy URL-t, amire megtörténik az átirányítás. Tehát nem tudom, hogy ebben a folyamatba hogy lehetne az SDK-t beilleszteni, ráadásul belülről a webview-ból triggerelni a natív fizetést

Szerk.: talán azt lehetne, hogy mint a külső linknél, ha stripe átirányítás történne, helyette bedobom a natív stripe fizetési réteget és lekérem hozzá az adatokat. De ez csak ötlet, fogalmam sincs, hogy működne-e

Szerintem a Stripe-ot így nem lehet megoldani (vagy szét kell hackelni valahogy), ez tipikus olyan SDK-nak tűnik, ami felrak egy gombot, a többit intézi (google login is hasonló). Biztos van rá kerülőút / "okos megoldás", de gondolkodni kell rajta...
-
prime_adam
aktív tag
Offban írom, mert ezek natív iOS-es tapasztalatok - közel sem biztos, hogy Androidon is pont így van minden, de a nullánál talán több:
- normál böngésző kezelését a mobilra fejlesztett app kódjából lehet megoldani,
- appon belüli vásárláshoz pedig le kell fejleszteni (legalább) azt a részt mobilra is, be kell húzni az adott SDK-t (elvileg ez az Androidon), másképp nem oldható meg szerintem, amit írtál,
- offline működéshez pedig itt lehet érdemes elindulni, ez is kódot igényel tudtommal.Ahogy írtam, nálam iOS tapasztalat van (de egy székkel odébb a kollégám csinálta meg ugyanezt Androidra). Nálunk könnyítette a helyzetet, hogy nem kellett se offline működés, se fizetéses funkció, így csak a böngésző alakítása kellett. Valamint azt még érdemes lehet tudni (például azért, mert lehet, hogy egy év múlva meg iOS-re szeretnétek áttérni), hogy az Apple korábban elég szigorú szemmel nézte az ilyen (egy WebView-ba csomagolt) appokat, és nem is nagyon engedte ki. Ma már jobb a helyzet, de ez is egy kockázat lehet
Köszi a választ!
A külső linkek kezelését megnéztem és valóban találtam rá megoldást (legalábbis elméletileg).
A fizetési rendszerrel viszont továbbra is vannak bajaim. Ahogy nézem az SDK-t úgy tudom használni, hogy van egy "natív gomb", ami fizetésre megjelenít egy réteget az app felett. Ez egyébként tök jó lenne, csak a fizetési gomb már szerepel a webes verzióban, elküld egy kérést a backendnek, az elindítja a stripe fizetést és a frontend visszakap egy URL-t, amire megtörténik az átirányítás. Tehát nem tudom, hogy ebben a folyamatba hogy lehetne az SDK-t beilleszteni, ráadásul belülről a webview-ból triggerelni a natív fizetést

Szerk.: talán azt lehetne, hogy mint a külső linknél, ha stripe átirányítás történne, helyette bedobom a natív stripe fizetési réteget és lekérem hozzá az adatokat. De ez csak ötlet, fogalmam sincs, hogy működne-e

-
balazs1022
őstag
Sziasztok!
Poco X3 telefonom van. Szeretném MILC fényképezőgéppé alakítani. 4 kamera van a hátulján. Ebbol ketto semmire sem való. A 4 ből 3-nak ugyanolyan a csatlakozoja. Tettem bele még egy ugyan olyan 13mp-es kamerat (mint ami alapból benne van), az egyik makró lencse helyere. Sajnos nem is ismeri fel egyik alkalmazas sem. Nem lehet valahogy megoldani, hogy ugyanaz a kamera masik slot-ban is mukodjon? Mivel ugyanolyan kamerarol van szo ezert fel kellene h ismerje...
A következő lepes az lenne, hogy a lencseket kiveszem, es csak a pőre szenzor látszik ki, majd erre csatlakoztatnek objektiveket. A makró kamerat egyebkent meg tudtam igy csinálni, tudok raw-ban is fotozni vele. Csak keves a 2mp-es felbontas. Igy nez ki, mikor az érzékelő kilatszik:
Erre senki? Még fizetnék is érte, ha valaki meg tudná csinálni. :)
-
thiclyoon
aktív tag
Sziasztok!
Egy kis elméleti segítséget kérnék tőletek, de légyszi csak kíméletesen, mert nem vagyok mobilfejlesztő.

Adott egy viszonylag komplex weboldal (frontend React), ahol egy külső payment gateway (Stripe) van használatban. A felület szépen skálázódik mobilra is.
A kérdés, hogy van valami egyszerűbb mód ebből appot csinálni, vagy felejtős? React Native WebView-ra gondoltam, de van egy csomó kérdés, ami nem tiszta:
- Külső linkeknél hogy akadályozom meg, hogy ne a webview-ba töltődjön, hanem például nyissa meg normál böngészőben?
- Hogyan tudok webview-ból stripe fizetést indítani? Ugye Google nem fogja elfogadni, ha simán betöltöm a webview-ba (ha egyáltalán lehet) a stripe fizetési oldalát, mert tudtommal app-on belüli vásárláskor a Google Pay-en keresztül történnie a fizetésnek.Ráadásul nem tudom elfogadja-e a Google és extra munka lenne, hogy offline is betöltsön (PWA?), bár utóbbi a legkisebb gondom.
Másrészről, minden más megoldás (még a React Native portolás) is dupla kódbázist eredményezne, ami nagyban nehezítené a jövőbeli munkát.
Szóval volt köztetek már valaki hasonló helyzetben? Mi lett végül a megoldás?
Offban írom, mert ezek natív iOS-es tapasztalatok - közel sem biztos, hogy Androidon is pont így van minden, de a nullánál talán több:
- normál böngésző kezelését a mobilra fejlesztett app kódjából lehet megoldani,
- appon belüli vásárláshoz pedig le kell fejleszteni (legalább) azt a részt mobilra is, be kell húzni az adott SDK-t (elvileg ez az Androidon), másképp nem oldható meg szerintem, amit írtál,
- offline működéshez pedig itt lehet érdemes elindulni, ez is kódot igényel tudtommal.Ahogy írtam, nálam iOS tapasztalat van (de egy székkel odébb a kollégám csinálta meg ugyanezt Androidra). Nálunk könnyítette a helyzetet, hogy nem kellett se offline működés, se fizetéses funkció, így csak a böngésző alakítása kellett. Valamint azt még érdemes lehet tudni (például azért, mert lehet, hogy egy év múlva meg iOS-re szeretnétek áttérni), hogy az Apple korábban elég szigorú szemmel nézte az ilyen (egy WebView-ba csomagolt) appokat, és nem is nagyon engedte ki. Ma már jobb a helyzet, de ez is egy kockázat lehet
-
prime_adam
aktív tag
Sziasztok!
Egy kis elméleti segítséget kérnék tőletek, de légyszi csak kíméletesen, mert nem vagyok mobilfejlesztő.

Adott egy viszonylag komplex weboldal (frontend React), ahol egy külső payment gateway (Stripe) van használatban. A felület szépen skálázódik mobilra is.
A kérdés, hogy van valami egyszerűbb mód ebből appot csinálni, vagy felejtős? React Native WebView-ra gondoltam, de van egy csomó kérdés, ami nem tiszta:
- Külső linkeknél hogy akadályozom meg, hogy ne a webview-ba töltődjön, hanem például nyissa meg normál böngészőben?
- Hogyan tudok webview-ból stripe fizetést indítani? Ugye Google nem fogja elfogadni, ha simán betöltöm a webview-ba (ha egyáltalán lehet) a stripe fizetési oldalát, mert tudtommal app-on belüli vásárláskor a Google Pay-en keresztül történnie a fizetésnek.Ráadásul nem tudom elfogadja-e a Google és extra munka lenne, hogy offline is betöltsön (PWA?), bár utóbbi a legkisebb gondom.
Másrészről, minden más megoldás (még a React Native portolás) is dupla kódbázist eredményezne, ami nagyban nehezítené a jövőbeli munkát.
Szóval volt köztetek már valaki hasonló helyzetben? Mi lett végül a megoldás?
-
amstro555
tag
Igazából semi extra nincs benne, ahogy látom.
Természetesen kell egy engedély az SMS küldésére, és persze maga az SMS küldő metódus.
De, ahogy nézem ez egy nagyon-nagyon régi példa, mert, nem elég, hogy java-ban íródott (mostanában a kotlint preferálja a Google), de még az edittext-eket is a findviewbyid -vel keresi a képernyőn... :)
Az első példa az alapértelmezett SMS küldő applikációval küldi az SMS-, a második pedig az Android beépített SMS küldovel.Érdemes lehet a Google oldalán is utána nézni, hogy manapság mi az ajánlott modszer.
Ajaj, a semmi extra nekem full extra. Pedig 15 évig programoztam, de elrepült felettem az idő. Majd a téli szünetben nekiállok. 5.1.1 (Lollipop) a telefon, amire felrakom.

-
balazs1022
őstag
Sziasztok!
Poco X3 telefonom van. Szeretném MILC fényképezőgéppé alakítani. 4 kamera van a hátulján. Ebbol ketto semmire sem való. A 4 ből 3-nak ugyanolyan a csatlakozoja. Tettem bele még egy ugyan olyan 13mp-es kamerat (mint ami alapból benne van), az egyik makró lencse helyere. Sajnos nem is ismeri fel egyik alkalmazas sem. Nem lehet valahogy megoldani, hogy ugyanaz a kamera masik slot-ban is mukodjon? Mivel ugyanolyan kamerarol van szo ezert fel kellene h ismerje...
A következő lepes az lenne, hogy a lencseket kiveszem, es csak a pőre szenzor látszik ki, majd erre csatlakoztatnek objektiveket. A makró kamerat egyebkent meg tudtam igy csinálni, tudok raw-ban is fotozni vele. Csak keves a 2mp-es felbontas. Igy nez ki, mikor az érzékelő kilatszik:
-
vlevi
nagyúr
Igazából semi extra nincs benne, ahogy látom.
Természetesen kell egy engedély az SMS küldésére, és persze maga az SMS küldő metódus.
De, ahogy nézem ez egy nagyon-nagyon régi példa, mert, nem elég, hogy java-ban íródott (mostanában a kotlint preferálja a Google), de még az edittext-eket is a findviewbyid -vel keresi a képernyőn... :)
Az első példa az alapértelmezett SMS küldő applikációval küldi az SMS-, a második pedig az Android beépített SMS küldovel.Érdemes lehet a Google oldalán is utána nézni, hogy manapság mi az ajánlott modszer.
-
amstro555
tag
-
vlevi
nagyúr
Sziasztok! Szeretnék egy kis segítséget kérni kezdő programozóként. Írtam egy androidos SMS.apk appot, amit riasztónak szeretnék használni: ha a giroszkóp érzékeli a telefon mozgását, SMS-t küld. Működik is, de csak a telefon gyári SMS küldő programjának adja át az adatokat: telefonszám + szöveg. Hogy lehetne megoldani, hogy küldje is el? Köszönöm! (appinventor.mit.edu oldalon írtam)
Most nem vagyok gép előtt, de szerintem olvasd el ezt [link]
Én még nem próbáltam, hogy így működik-e az SMS küldés, ha ezt ismered, és így sem sikerül, akkor passzolom a kérdést. -
amstro555
tag
Sziasztok! Szeretnék egy kis segítséget kérni kezdő programozóként. Írtam egy androidos SMS.apk appot, amit riasztónak szeretnék használni: ha a giroszkóp érzékeli a telefon mozgását, SMS-t küld. Működik is, de csak a telefon gyári SMS küldő programjának adja át az adatokat: telefonszám + szöveg. Hogy lehetne megoldani, hogy küldje is el? Köszönöm! (appinventor.mit.edu oldalon írtam)
-
bucihost
senior tag
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); -
bandi0000
nagyúr
Sziasztok! Adott egy online rádió hallgató alkalmazás. Fel raktam play áruházra is, viszont most alakítottam rajta kicsit és ment rá egy frissítés. Play áruház vissza dobta, hogy már csak SDK 31 (vagy felette) lehet. Átírtam, viszont innentől android 12-n elhasal az alkalmazás. Ki debugoltattam, és ez a hibaüzenet jön:
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Viszont ha visszaírom a forráskódban az SDK verziót 30-ra (compileSdkVersion 30, targetSdkVersion 30), és magát az apk filet telepítem android 12-re akkor minden további nélkül működik.Találkoztatok már ilyennel? Ha igen mi a megoldás? Netet bújtam, de az ottani megoldásokkal ugyan ez a felállás.
Nálam pl a workmanager csinálta, updatelni kellett és jó lett, nem lehet, hogy valamelyik package hibázik? Hacsak nem használsz intentet
-
bucihost
senior tag
Sziasztok! Adott egy online rádió hallgató alkalmazás. Fel raktam play áruházra is, viszont most alakítottam rajta kicsit és ment rá egy frissítés. Play áruház vissza dobta, hogy már csak SDK 31 (vagy felette) lehet. Átírtam, viszont innentől android 12-n elhasal az alkalmazás. Ki debugoltattam, és ez a hibaüzenet jön:
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Viszont ha visszaírom a forráskódban az SDK verziót 30-ra (compileSdkVersion 30, targetSdkVersion 30), és magát az apk filet telepítem android 12-re akkor minden további nélkül működik.Találkoztatok már ilyennel? Ha igen mi a megoldás? Netet bújtam, de az ottani megoldásokkal ugyan ez a felállás.
-
DanaL
tag
Sziasztok, Appsheet fejlesztésben tudna valaki segíteni?
-
domel
tag
Én már egy ideje szervízben telepíttetem újra a windows-om, 4000 Ft-ot megér a lelki békém
-
fatal`
titán
Sziasztok,
Szeretnék segítséget kérni tőletek a következő problémával kapcsolatban: Egy custom romot telepítettem a redmi note 10 pro készülékemre. Van belőlük jó néhány ezért próbálgatom őket. A legutóbbi alkalommal megváltoztatta a recoveryt. A twrp helyet feltett valami mást. Vissza szeretném rá tenni, hogy további romokat próbáljak ki, de az adb sdk valamiért nem tudom telepíteni 0 fájlt telepít és cmd-ből fastbootba nem tudok flashelni recoveryt. Eddig minden tökéletesen működött hiszen korábban már több alkalommal is megcsináltam. Próbáltam már win 10 és 11 operációs rendszerekkel is, de nem jó valamiért. Utána kerestem googleba, de nem tartám érdemben megoldást.
Nem jó topic, android szakmai topicba nézz át.
Az adb-t meg a fastbootot nem kell telepíteni, le tudod tölteni a command line toolst a googletől: [link]
#5421: Ne vicceljünk már ilyennel elvinni szervizbe és kicsengetni 10k-t.
-
domel
tag
Egy programozó szempontjából mi a fene az a custom rom? Mindenre kapok engedélyt? (pl. saját programból mobil hálózatot választok, vagy ilyesmi?)
A lenti (előző) témához csak annyit, hogy mi programozunk, nem foglalkozunk operációs rendszerek telepítgetésével, én a helyedben elvinném szervízbe hogy telepítsék vissza az eredeti oprendszert, kifizeted a kb 10e Ft-ot, aztán próbálgatod tovább, ha még van hozzá kedved -
szabozsolt87
tag
Sziasztok,
Szeretnék segítséget kérni tőletek a következő problémával kapcsolatban: Egy custom romot telepítettem a redmi note 10 pro készülékemre. Van belőlük jó néhány ezért próbálgatom őket. A legutóbbi alkalommal megváltoztatta a recoveryt. A twrp helyet feltett valami mást. Vissza szeretném rá tenni, hogy további romokat próbáljak ki, de az adb sdk valamiért nem tudom telepíteni 0 fájlt telepít és cmd-ből fastbootba nem tudok flashelni recoveryt. Eddig minden tökéletesen működött hiszen korábban már több alkalommal is megcsináltam. Próbáltam már win 10 és 11 operációs rendszerekkel is, de nem jó valamiért. Utána kerestem googleba, de nem tartám érdemben megoldást.
-
bandi0000
nagyúr
Mindig a tesztelhetőséget emelik ki, mint fő előny, nekem kicsit ilyen HTML CSS feelingem van, amit nem szeretek, sose tudtam normálisan, és hatékonyan alkalmazni
Valahogy ez a xml-es dizájneres ide oda húzogatás nekem nagyon bejön.Amúgy szerintem, ha szépen el vannak szeparálva, akkor átlátható az
-
Zsoxx
őstag
Szerintem sokan, ên is szeretném, de nem biztos, hogy merném alkalmazni egy full új projektben, mert ha elakadok, akkor cumi van :D Bár ott a stack-o, de pl jelenleg a navigàció bonyolultabb, legalább is amikor legutóbb láttam, és egy 3. Féltől szàrmazó megoldást javasolnak, szinte olyan mint a NavigationComponent elött, akkor is egy másik könyvtárat kellett volna használni, ami megoldja
Nekem vannak kétségeim a hasznosságát illetően. Bár sok előnye van, nem biztos, hogy átláthatóbbá teszi a kódot, ha belekeverjük a UI-t leíró részt is.
-
bandi0000
nagyúr
Szerintem sokan, ên is szeretném, de nem biztos, hogy merném alkalmazni egy full új projektben, mert ha elakadok, akkor cumi van :D Bár ott a stack-o, de pl jelenleg a navigàció bonyolultabb, legalább is amikor legutóbb láttam, és egy 3. Féltől szàrmazó megoldást javasolnak, szinte olyan mint a NavigationComponent elött, akkor is egy másik könyvtárat kellett volna használni, ami megoldja
-
Zsoxx
őstag
Szerintetek az Android-fejlesztők közül hányan ugrottak rá a Jetpack Compose-ra? Érdemes megtanulni?
-
Zsoxx
őstag
-
sztanozs
veterán
Szerintetek a Google Geocode API-ja szándékosan van ennyire lebutítva? A
getFromLocationName()függvényről beszélek, pl. ha átadom neki a "Balaton" szót, elvileg az összes, Balaton-nal kezdődő településnevet vissza kéne adnia, de csak a tó nevét kapom meg. Balatonfüredet még a "Balatonfü"-re se találja meg.
Gondolom, a fizetős Places API-nál nincsenek ilyen problémák, az tökéletesen működik.Fura, mert még egy "Balaton" nevű település is van...
-
domel
tag
Ahogy írod (kivéve ez: "az összes, Balaton-nal kezdődő településnevet vissza kéne adnia" - ez nem igaz). A link szerint ezt az API-t akkor használd, ha teljes névre keresel ("Balaton", "Balatonfüred", és nem "Balatonfü"), és egy eredményre számítasz. Minden másra ott az Autocomplete.
Ez a Geocoder API szerintem a Térkép alkalmazással kommunikál, mert semmi nem kell neki a Manifest-ben, még internet sem
-
thiclyoon
aktív tag
Szerintetek a Google Geocode API-ja szándékosan van ennyire lebutítva? A
getFromLocationName()függvényről beszélek, pl. ha átadom neki a "Balaton" szót, elvileg az összes, Balaton-nal kezdődő településnevet vissza kéne adnia, de csak a tó nevét kapom meg. Balatonfüredet még a "Balatonfü"-re se találja meg.
Gondolom, a fizetős Places API-nál nincsenek ilyen problémák, az tökéletesen működik.Ahogy írod (kivéve ez: "az összes, Balaton-nal kezdődő településnevet vissza kéne adnia" - ez nem igaz). A link szerint ezt az API-t akkor használd, ha teljes névre keresel ("Balaton", "Balatonfüred", és nem "Balatonfü"), és egy eredményre számítasz. Minden másra ott az Autocomplete.
-
Zsoxx
őstag
Szerintetek a Google Geocode API-ja szándékosan van ennyire lebutítva? A
getFromLocationName()függvényről beszélek, pl. ha átadom neki a "Balaton" szót, elvileg az összes, Balaton-nal kezdődő településnevet vissza kéne adnia, de csak a tó nevét kapom meg. Balatonfüredet még a "Balatonfü"-re se találja meg.
Gondolom, a fizetős Places API-nál nincsenek ilyen problémák, az tökéletesen működik. -
urandom0
őstag
Nem azzal van baj, ha akarnám, szerintem nem okozna problémát átállni Javaról Kotlinra. Az más kérdés, hogy már eleve a Javát sem szeretem.
Pedig régen írtam programokat Turbo Pascalban DOS alá, azt élveztem. Meg írtam Linux alá C-ben, azt is élveztem. Írtam egy mini-közösségi oldalt, PHP backenddel, 5 nap alatt 500 felhasználóm lett
Az is jó volt.
Van egy saját web crawlerem is, Vala nyelven írtam, 0-24-ben fut egy Debian VPS-en, adatokat gyűjt a webről. Semmi értelme, de élveztem, amikor megírtam.
De az Androidos témát nem élveztem egy percig sem, csak azért csináltam, mert azt gondoltam, a mobilappokat a legkönnyebb monetizálni.
Na, nem sorolom tovább, nincs értelme
-
bandi0000
nagyúr
Pedig attól, hogy félelmetes a kotlin, sokkalta jobb mint a java, és Android is rengeteget fejlődött, sokkalta egyszerűbb lett, gondold el, hogyha van egy formod 10-20 view-al, az 20db változó, + 20 db findViewById, sokkalta kompaktabb lett az egész
Amúgy még azt tudnám elképzelni, hogy változót hozott létre, btnLogin néven, és értéket adott neki, mert utána működik a dolog ugye
-
thiclyoon
aktív tag
persze mivel
"binding.btnLogin" != "btnLogin". ezzel annyira akartam rávilágítani, hogy ha megvan a (vagy egy) működő megoldás (ami itt a binding.-os lett), akkor minek rágódni azon hogy a másik nem működik? nem működik és kész, én még nem láttam olyan kódot amúgy ahol binding. nélkül működött volna. örülni kell hogy megvan a megoldás és haladni tovább, én úgy gondolom nem szabad fennakadni az apróságokon. számomra ebből annyi lenne a tanulság, hogy "a view-kat binding. előtaggal érem el innentől kezdve, noted", és kész. a fenti mind személyes vélemény, off vége -
Zsoxx
őstag
Ez Kotlin, nem Java. Akkor miért iratkoztál be?
-
urandom0
őstag
Tudom, hogy figyelmetlen vagyok, mert más dolgokat is csinálok közben.
És az az igazság, hogy ez az egész Androidos-Javás dolog nekem nagyon nem fekszik... nem akarom kifejteni bővebben, még egyszer kösz a segítséget, de én most elengedem ezt a dolgot. -
Zsoxx
őstag
Kezdem nem érteni (én sem)
#5400-as hozzászólásban már működött. az hogy btnLoginként vagybinding.btnLoginként éred el, szerintem ne zavarjon, ez a téma is nagyon sokat fejlődött csak az elmúlt 2,5 év alatt (java-s findViewById, butterknife, kotlin synthetic, view binding + data binding), simán lehet hogy az oktató lehagyott valamit(amúgy bme infó msc-n is binding.xy-ként tanítják ha ez számít valamit
)Nem nagyon értem mit akarsz ezzel mondani. Kurvára nem mindegy, hogy btnLogin vagy binding.btnLogin, ugyanis az előbbivel nem fog működni.
-
thiclyoon
aktív tag
Kezdem nem érteni (én sem)
#5400-as hozzászólásban már működött. az hogy btnLoginként vagybinding.btnLoginként éred el, szerintem ne zavarjon, ez a téma is nagyon sokat fejlődött csak az elmúlt 2,5 év alatt (java-s findViewById, butterknife, kotlin synthetic, view binding + data binding), simán lehet hogy az oktató lehagyott valamit(amúgy bme infó msc-n is binding.xy-ként tanítják ha ez számít valamit
) -
Zsoxx
őstag
Az előbb jól írtad, erről hol maradt a binding a btnLogin elől?
-
urandom0
őstag
Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Sony MILC fényképezőgépcsalád
- DJI topic
- World of Tanks - MMO
- A fociról könnyedén, egy baráti társaságban
- Milyen processzort vegyek?
- Bemutatkozott az Oppo kamerás csúcsmodellje
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Kormányok / autós szimulátorok topikja
- iPhone topik
- Milyen egeret válasszak?
- További aktív témák...
- HP EliteBook X360 830 G8: i7-1186G7/32GB/512GB NVMe SSD/13"3 FHD,IPS,Matt,Touch/WIN11 Pro
- DELL T5810 Workstation PC XEON E5 2680 V4 32Gb DDR4 512Gb SSD, QUADRO K4200 4GB DDR5 6HÓ GAR!
- iPhone 17 Pro Max 256GB Cosmic Orange Karcmentes, 2028.10.22.-ig garanciális!
- www.olcsogamerpc.hu - ÚJ GamerPC 71 - Intel i5-14400F - RTX 5060 Ti - 16GB DDR4 - 1TB NVMe -GARANCIA
- www.olcsogamerpc.hu- ÚJ GamerPC 999 - Intel Ultra 7 265KF - RTX 5070 - 32GB DDR5 -2TB NVMe -GARANCIA
- Dell 27" USB-C Hub Monitor - P2723DE - 27% ÁFÁs
- Eladó Apple iPhone 12 Mini 64GB fehér / 12 hónap jótállás
- HP X360 11 G7- Intel N6000/8GB RAM/ 11.6" HD érintőkijelző, passzív hűtés - garanciával
- Samsung Galaxy Tab S9 Ultra 5G 256GB 12GB RAM Graphite Karcmentes állapotban 2027.05.15-ig garancia
- Honor Magic V2 512GB,Újszerű,Dobozaval,12 hónap garanciával
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: aiMotive Kft.
Város: Budapest

ha ugyanúgy akarod őket behúzni, mint más függőségeket, akkor pontosan ugyanúgy kell őket kezelned. De amúgy valahogy úgy néz ki ez a legtöbb esetben, hogy ha organikusan növi ki magát, akkor


)


