Hirdetés
- TCL LCD és LED TV-k
- AMD Navi Radeon™ RX 9xxx sorozat
- Melyik tápegységet vegyem?
- Milyen alaplapot vegyek?
- ASRock B860 Pro RS ddr5
- Épített vízhűtés (nem kompakt) topic
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Kormányok / autós szimulátorok topikja
- Soundbar, soundplate, hangprojektor
Új hozzászólás Aktív témák
-
#39560925
törölt tag
Dagger 2-ről tudna valaki mutatni egy olyan példát, ahol egy Fragmentbe injektálnak be valamit?
Végignéztem minden tutorialt a neten, és mindenhol tök máshogy használják a Dagger 2-t. És sehol sem injektálnak Fragmentekbe. A gond az, hogy a Fragmenteknek tudtommal nem ajánlott constructort írni, mindig a default constructort kell használni, de példákban amiket találta, mindenféle constructorokat írnak a dependáló osztályoknak.
Kezdésnek annyit szeretnék, hogy van egy osztályom, amit singletonként szeretnék használni, és aminek szüksége van az ApplicationContext-re. Ezt az osztályt szeretném Dagger 2-vel injektálni egy Fragmentbe.
-
#39560925
törölt tag
válasz
automATIc
#3397
üzenetére
ezt olvasd el a többnyelvűség támogatásáról. semmi ilyesmi nem kell a kódba.
-
automATIc
csendes tag
Sziasztok! Sikerült kinyerni a telóból, hogy éppen milyen nyelvre van beállítva és szeretném az eredményt egy elágazásba tenni. Tehát ha a nyelvi beállítás magyar akkor a magyar tömbbe elmentett szövegeket írja ki, ha pedig más akkor az angol tömb szövegeit írja ki.
TextView language = (TextView) findViewById(R.id.tView2);
language.setText(Locale.getDefault().getDisplayLanguage());pl:. if(language=="ide mi jön?"{
randomText.setText(magyar);
}else( language== "ide mi jön?"{
randomText.setText(english);
} -
Android Studio 1.3.2-n megpróbáltam összerakni egy theme-pack-et CM-hez. Ami egy sima activity nélküli projekt kis xml buherálás és egy ttf file és elvileg kész.
Ez alapján próbálkoztam. [link]
Először az volt a gondom, hogy alapból nem hoz létre apk-t. Oké Gradle menüben rámentem az assemble pontra...de folyamatosan hibát kapok:
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\...\AppData\Local\Android\Sdk\build-tools\23.0.1\aapt.exe'' finished with non-zero exit value 1De előtte volt app
exDebug.... valami error azt már nem tudtam előidézni.szóval a fenti műveletre van valami workaround, vagy tutorial arra amit szeretnék csinálni?
Csak saját célra akarok egy unsigned apk-t. -
vlevi
nagyúr
Ma én is belefutottam ebbe a problémába:
new onAttach(Context context) is not being calledArról van szó, hogy, ha fragmenteket használsz, akkor korábban (android lalipapival bezárólag) az onAttach paramétere az az activity volt, ahova a fragment bekerült. Ez szép és jó, mindenki örült. De én hülye (és sokan mások) már felrakták az újabb, 6-os droidhoz való 23-as SDK-t, amiben az onAttach(Activity activity)
deprecatedlett, és használd helyette az onAttach(Context context)-et. A duplaszívás az benne, hogy a context az nem mindíg elég, sokszor az activityre szükség van, amin rajta van a fragment. A másik szívás, hogy nem szokása a droidnak meghívni az onAttach(context) eseményt. Ez ott derült ki, hogy természetesen az onAttach eseményben el akartam menteni az activity-t egy getactivity() hívással, de valahogy furcsa módon mindíg null volt.
Elba****tam vele az estét, meg egy jó időt, míg a projektemet visszacsináltam a korábbi, 22-es SDK-ra."Nekem annyira megtetszett, hogy a szakdogámba is belekerül."
Érdekesen néz ki.
Még véletlenül sem merek róla bármi véleményt mondani, mert nem mélyedtem el benne semennyire, de most is eléggé kavarodik a fejemben a pascal, c#, java kód egyszerre, és most hirtelen nem hiányzik egy olyan programnyelv, amiben mindhárom egyszerre jelen van
-
kilaci
csendes tag
Van egy kis programon, melyben két Handler (postdelay) fut.
Valamiért a két Handler összeakad.Az első Handlernél egy file meglétét figyelem 200ms-ként. Ha a file megvan, akkor lépnék tovább.
Valami olyasmi lehet a probléma, hogy a 200ms alatt a file lekérdezés nem valósul meg és ezért amikor már tovább lépne, akkor "valamiből" már több van mint kéne.??Mindenesetre a következő Handlerben meghatározott postdelayek már teljesen összezavarodnak.
-
thon73
tag
A kérdés csak az, hogy miként lesz belőle kettő. Látom, hogy valamiként a headerrel kellene kombinálni, de vagy a bal oldalra nem tudok beállítási lehetőségeket tenni, vagy a jobb oldallal nem kezd semmit. Bizonyára én tolok el valamit, amire ebből nem jövök rá.
Nem ismersz véletlen valami oldalt, ahol működő megoldás van? -
#39560925
törölt tag
válasz
#39560925
#3385
üzenetére
Fogtam és konvertáltam az appomban minden Java fájlt Kotlin fájlra Android Studioval, és működik minden faszán. Most olvasgatom miket tud a nyelv, és eléggé bejön. Ha tippmixelnék, megtenném többszáz forintban, hogy 1-2 év múlva ez lesz a hivatalos nyelv az Androidhoz.

-
#39560925
törölt tag
Kotlinban nyomja valaki a fejlesztést?
-
thon73
tag
Láttam egy olyan preferences megoldást, ahol egy osztott képen (nyilván fragmentben) a bal oldalon voltak a "fő" beállítási lehetőségek, melyekhez csoportonként a jobb részen más és más albeállítási lehetőségek jelentek meg. Ez nagyon tetszett, de nem emlékszem a program nevére, hiába kerestem. (Telon meg nem csinál ilyet persze)
Van erre valamilyen egyszerűsített mód, vagy esetleg valaki találkozott egy ilyen tutoriallal? ("Kézzel" meg tudom oldani, de szerintem kell legyen erre valami erősan automatizált módszer, amit nem látok. Vagy legalábbis nem látok át.) Előre is köszönöm!
(Ott tartok, hogy az Activity EGY fragmentet simán megjelenít, amit xml-ből feltölt.)
-
Karma
félisten
válasz
aprokaroka87
#3380
üzenetére
A kérdésedet inkább a Tasker topikban tedd fel, kérlek.
-
aprokaroka87
nagyúr
üdv!
Nem vagyok programozó viszont lenne egy kérdésem
A Tasker alkalmazásban levő java functions rész mire lehetne használni?föleg programozás terén.
a pontos helye task>code>java functions -
#39560925
törölt tag
Karma, nem sikerült ám csak úgy belőni a streamsupportot az Android Studioban.

Itt van a build.gradlém. Nem tudok rájönni mi hiányzik belőle, neten alig találni valamit.Az annimon:stream-et tudom használni, de az ilyen gagyin néz ki:

-
kilaci
csendes tag
Android programozót a hétvégére!

Egy minimális alkalmazás elkészítéséhez keresek android programozót a hétvégére.
Egyszerű applikáció, melynek leírását privát üzenetben elküldöm.Fizetés megegyezés szerint.
-
automATIc
csendes tag
Hali! Megint én. Valaki megtudná mondani, hogy miként lehet UI felületet szerkesztett képekkel feltölteni?
Azaz milyen felbontásra kell csinálni és meg kell-e csinálni az összes felbontásra(medium, large, stb.) .
Köszi! -
automATIc
csendes tag
Hali! Jó pár óra szenvedés után kijelentem...hogy még mindig nem megy. Valaki tudna ajánlani egy jó lehetőleg magyar nyelvű forrást ahol találok infót? Csak annyit szeretnék, hogy amit az Activity-ben lementek, azt megjelenítse egy másik Activityben mikor megnyílik.
-
válasz
Retepx84
#3368
üzenetére
Szia, rossz topikban kopogtatsz
Rom cserere keress valakit a nexus 7 sajat topikjaban vagy az androidos tabletek topikban. Usb bedugasra a budos eletben nem fog bekapcsolni a tablet, ehhez a kernelt kene atirni. Ilyen kikapcsolos widgetet meg szerintem talalsz a google playen is 
udv
-
Retepx84
csendes tag
Kedves Fórumosok!
Egy programozót keresek, aki ujra tudná rakni a 4.4et.nexus 7 2012. Fel tudná tanitani, hogy USB csatlakozás után egyböl bekapcsoljon. Szükségem lenne egy kikapcsologombra is a felületen, ami teljesen kikapcsolja nem csak készenletbe teszi. A segítséget honorálnám is. Elöre is köszönöm.
-
vlevi
nagyúr
"readMessage-et a másik Activitydbe kéne írni, nem ide "
Az is igaz...
Amikor elkezdtem írni a saját hozzászólásomat, még nem láttam a példakódot.
De maradhat a fő Activityben a beolvasás, mert, ha ki akarod írni egy textbe, amit gombnyomásra lehet szerkeszteni, és utána a módosítást megjeleníteni.
Én legalábbis (1, vagy 2 heti Adroid ismerettel
) úgy csinálnám, ahogy leírtam. -
Karma
félisten
válasz
automATIc
#3362
üzenetére
Kérlek legközelebb használd a Programkód formázást, vagy ilyen hosszú kódot inkább Pastebinre vagy más, hasonló szolgáltatásra másolj be. Az előbbit átformáztam, hogy mi is olvashassuk.
Egyébként van egy pár probléma a kóddal:
1) A showClick metódusodban az az if utáni pontosvessző nem kell oda, így most le se kéne fordulnia.
2) A fájlokat nem zárod be abban az esetben, ha valami hiba történne... Nézz utána a try-catch-finally-nek, és a finally blokkban zárd le a streameket.
3) Nem sok értelme van soronként felolvasni egy fájlt azért, hogy utána soronként beleformázd egy stringbe.Egyébként az eredeti kérdésedre egyszerű a válasz: a readMessage-et a másik Activitydbe kéne írni, nem ide

-
vlevi
nagyúr
válasz
automATIc
#3360
üzenetére
Ha va egy Activityd, amiből indítasz egy másodikat, és a végeredményre vagy kíváncsi, akkor a startActivityforResult-t használd, a startActivity helyett. Ha így csinálod, a fő Activity-nek az onResult metódusában értesülsz arról, hogy befejeződött a második.
Természetesen arról is kapsz információt, hogy mi volt az a másik activity, ami befejeződött (az az id, a resultcode-ban pedig azt, hogy ok, cancel, vagy mást nyomott-e a felhasználó, és végül a visszakapott intent extra paramétereibe azt írsz be a második Activityben, amit akarsz.
Itt egy példa
[link]Ja, igen. A második, elindítandó Activitynek is át tudod adni a szöveget, a startActivity előtt, az intent.putExtra ("VALAMI","Szöveg") a másik oldalon könnyen kiolvasható.
-
automATIc
csendes tag
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
textView.setVisibility(View.GONE);
}
public void writeMessage(View view){
String Message = editText.getText().toString();
String file_name = "user_data";
try {
FileOutputStream fileOutputStream = openFileOutput(file_name,MODE_PRIVATE);
fileOutputStream.write(Message.getBytes());
fileOutputStream.close();
Toast.makeText(getApplicationContext(),"Message saved",Toast.LENGTH_LONG).show();
editText.setText("");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readMessage(View view){
try {
String Message;
FileInputStream fileInputStream = openFileInput("user_data");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer stringBuffer = new StringBuffer();
while ((Message=bufferedReader.readLine())!=null)
{
stringBuffer.append(Message +"\n");
}
textView.setText(stringBuffer.toString());
textView.setVisibility(View.VISIBLE);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void showClick(View view){
if (view.getId() == R.id.showTextButton);
Intent sb = new Intent();
sb.setClass(this, ReadText.class);
startActivity(sb);
}
}Kb. itt tartok most. Azt szeretném, hogy az Activity mutassa a beírt szövegemet.
Egyelőre ezt az "adatbázist" tudtam kiCopyzni ami működik is
[ Módosította: Karma ]
-
Karma
félisten
válasz
automATIc
#3360
üzenetére
Egy kicsit pontosítanod kell, mit csináltál eddig.
Például hogy érted azt, hogy "lementem a beírt karaktereket"?Ahhoz, hogy a másik Activityhez eljusson a szöveg, vagy az indításához használt Intentbe kell beírnod, mint egy String extrát; vagy pedig ki kell mentened valahova, és az új Activityben visszaolvasnod.
Mivel egy todo appnak csak akkor van értelme, ha a listát nem felejti el, triviálisan adja magát a második megközelítés. Mondjuk valószínűleg elég nagy falat az adattárolás, de valami adatbázisra lesz szükséged. Az új Activity meg megkapja azt az ID-t, ami alapján eléri az újonnan lementett bejegyzést.
-
automATIc
csendes tag
Sziasztok! Kezdő vagyok és elakadtam. Szeretnék egy afféle ToDo appot létrehozni, de a beírt szöveg lementése után szeretném kiíratni egy Activity-ben TextView által, de nem jön össze. Addig megvagyok, hogy lementem a beírt karaktereket és gomb hatására kiíratom, de szeretném, ha gomb nélkül, a mentés után előugró Activity TextView-ja tartalmazná a lementett szöveget. Tehát:
Szöveg bevisz -> save -> gomb megnyom -> Activity TextView megjelenít. Válaszotokat előre is köszönöm.
-
#39560925
törölt tag
Rossz helyről hívtam meg a refreshFriends metódust, és a megfelelő dolgok együttállásával előfordulhatott, hogy valid accessToken nélkül indítottam a Facebook felé GraphRequestet. Az accessToken kezeléséhez a Facebook SDK abstract AccessTokenTracker osztályából származtam le, és az App elindulásakor még nincs accessTokenem, mindig csak pártíz - párszáz miliszekundummal később, mert ez valahogy jön a szerverről (el van előlem rejtve a működése). refreshFriends-et csak akkor szabad meghívni, ha már van accessToken.
debug módban annyival lassabb lehetett az alkalmazás, hogy megjött a Facebooktól az accessToken, mielőtt a GraphRequest kérés megtörtént volna. Legalábbis ez a tippem.
Megoldás az volt, hogy az App indulásakor megnézem, hogy az accessToken null-e, és ha igen, akkor nem hívom meg a refreshFriends-et. Ehelyett meghívom a tokenTrackerben, ha érkezik egy új token, ami nem null.
Ezt régen is hasonlóan csináltam, de azóta refaktkráltam a kódot, mert kurva zajos volt, és ekkor mászott bele a bug.
-
#39560925
törölt tag
mitől lehet az, hogyha debugban léptetem végig a kódot, akkor meghívódik egy metódus, és végigmegy a kitalált logika, viszont ha nem teszek breakpointot a programba, és hagyom futni, akkor nem hívódik meg az a metódus?
Egész konkrétan erről van szó. Ha itt van breakpoint, akkor meghívódik a metódus, és látom az eredményét a képernyőn, ha a metódusnak akár csak az első sorába teszem a breakpointot, akkor nem fut rá a program, és nem is látni az eredményt a képernyőn. Természetesen olyan sorra rakom, ahol meg tud állni a debugger.
-
Karma
félisten
Egynek a DreamFactory jutott eszembe, ez egy PHP-alapú szerver, ami próbálja általánosítani a backend feladatait. De csak arra keresve, hogy "Postgresql REST API", vannak még érdekes találatok: PostGrest például.
Ha meg saját fejlesztés kellene, a Spring Boottal, Spring Data JPA-val elég gyorsan ki lehet pörgetni egy jól működő backendet, biztonsággal meg alkalmazásszerverrel karöltve.
Viszont az általános Programozás topik, vagy választott technológia mentén valamelyik nyelvi topik jobb hely lenne a kérdésnek és/vagy a folytatásnak.
-
_kovi_
aktív tag
Sziasztok!
Szeretnék tanácsot kérni, hogy mi a legegyszerűbb leprogramozási módja annak hogy Android telefonról elérjek egy Postgre adatbázist interneten keresztül. Milyen alkalmazásszervert érdemes használni, stb...
Egy olyan szoftvert készítünk ahol hozzá kell férni egy DB-hez Androidról.
Köszönöm.
-
thon73
tag
Van itt esetleg valaki, aki járatos az InputConnection kezelésében?
Az Android dokumentáció nem mindig egyértelmű számomra, a web meg elég üres ebben a kérdésben. Próbálkozással, source-okkal sok mindent kilogikáztam, de néhány kérdést szívesen megtárgyalnék, ha van valaki szintén érdeklődő...
-
thon73
tag
Lehet, hogy hülyeséget kérdezek.
Ha csupán egy tizedes pontosság kell, akkor nem lehet kerekítéssel használni a double-t? Mert a hiba mindig csak a sokadik értéken jelentkezik?
((Én egyébként ilyen "kis" értékeknél szoktam int-et is használni, 100 v. ezerszeres szorzóval. Pl. képernyőméret és szövegméret kiszámításánál.))Mondjuk, biztos, hogy a BigDecimal a legpontosabb, csak igen kacifántos. Na jó, ez nem igazi androidos kérdés.
-
Karma
félisten
Az IEEE754 lebegőpontos számok már csak ilyenek, hja. A tízes számrendszerben leírható számok kettesben elég gyakran csak végtelen törtként írhatóak fel. Nem véletlenül szigorúan tilos bármilyen pénzügyi, vagy precíziót igénylő számításhoz használni.
Van helyette BigDecimal osztály, ami bár sokkal körülményesebb (immutable, és metódusokat kell hívni az operátorok helyett), mégis tökéletes pontosságot ad, használd azt.
A floatra castolást meg pláne felejtsd el, hacsak nem valami androidos API-nak kell floatot átadni.
---
Az SDK verziós kérdésre: a double működésében nem számít. A target SDK-t célszerű a legújabbon tartani, hogy az új telefonokon ne legyen gond (figyelmeztet is az IDE, ha le vagy maradva). A minimum pedig az, aminél régebbire fel se települhet az alkalmazásod.
Gyakorlatilag azokat az osztályokat használhatod gondtalanul, amik a min. SDK-ban már elérhetőek voltak. Ha nagyon muszáj, újabb rendszereken, verzióellenőrzésekkel körülvéve a target SDK-ból is hívhatsz dolgokat, de ezek a sorok felrobbannának régebbi telefonokon.
-
vlevi
nagyúr
Új vagyok android témakörben, de most hirtelen belefutottam egy furcsaságba.
double adattípus mennyire jó számításokhoz?
debugolom az appot, és ezt látom a kódban
double fogy=0;
double mn_kezdoallas=OraErtek(mn_min); // debugger 14170.3-t ír ki
double mn_vegallas=OraErtek(mn_max); // debug szerint 15274.0 Valóban ennyi, én adom vissaz az értékeket
fogy=mn_vegallas-mn_kezdoallas; // 1103.7000000000007
float fogy2=(float)mn_vegallas-(float)mn_kezdoallas; // 1103.7002A kérdésem az, hogy valamit el...tam, vagy tényleg ennyire pontos (pontatlan) már 1 tizedesjegynél is?
Számít valamit az, hogy android 4.2-t adtam meg MinSDK versionnak (a telefonomon 4.2 van, nincs kitkat, lolipo), de a targetsdk már 23-as? Tegnap ugyanis frissített az android studio, már a 6-os droidhoz való sdk-t is lehúzta. -
Karma
félisten
válasz
#39560925
#3342
üzenetére
Mi biztosan jobban tudjuk, mint a Google

Egyébként itt a kapcsolódó forráskód, ez biztosan nem hazudik. -
#39560925
törölt tag
ART-ban már compacting GC van? Gyors keresgélés során csak Lollipop előtti cikkeket találtam arról, hogy egy compacting GC fejlesztés alatt áll, és majd jön az ART-ba. Itt azt írják az van, de nem tudom higgyek-e neki.
-
thon73
tag
válasz
rgeorge
#3331
üzenetére
Köszönöm az IntDef ötletet, ezt korábban nem olvastam.
Megtaláltam az "ideális" megoldást:
Amikor csak a korlátozott számú elemre van szükség, akkor az IntDef-et fogom használni. ("hagyományos" enum)
Ha az enumnak szüksége van metódusokra is (vagy valami működésre, mint most), akkor meg azt!

to Karma:
A linkeket is köszönöm, nagyon hasznosak. Ekkora memórianövekedésre nem gondoltam, így persze, hogy nem jelez. Egyébként a doksi még mindig tartalmazza a 16 Mbyteot is (Igaz, hozzáteszi, hogy ha 2.2-re is akarunk fejleszteni), és az enum szigorú tiltását is.
-
Karma
félisten
Az enumok memóriaigényéről nem tudok semmit (eredetileg az óva intésről se tudtam, én vígan használtam ha azt ítéltem a megfelelő eszköznek
).A képekkel valószínűleg szerencséd volt, vagy nem foglalnak annyit, mint gondoltad. Még mai eszközökön is jókora OOM pofonokat lehet kapni, ha mondjuk fényképeket olvas fel az ember sampling nélkül, és nem hív rájuk recycle-t.
A 16 MB-os korlát már nagyon régen volt egyébként, platformonként és eszközönként is ingadozik. Némi olvasnivalót találtam a témában SO-n: [link][link] Az utóbbiban van egy lista pár modern eszközről is, hogy hogyan alakultak a számok.
-
thon73
tag

Igen, többek között pont ezért szerettem volna enum-ot használni. Rosszul fogalmaztam: már a C-ben is nagyon szerettem, amikor még tized ennyit sem tudott.Mondjuk azt még mindig nem értem, hogy pontosan mi is az, ami olyan "nagy". Egy integer konstansnál nyilván nagyobb, de egyébként éppen pont akkora kell legyen, mint egy másik objektum-hivatkozás (mármint egy osztálypéldányban.)
Vagy az osztály létrehozásához szükséges nagyobb terület? De számít ez az egyszeri fél-egy kilobyte?Most már egy egyre speciálisabb billezeten ügyködünk, ahol eredetileg 1000 billentyűvel számoltam. Ha ezt beszoroztam egy-egy osztálypéldánnyal, akkor elég elképesztő értéket kaptam. (Többet, mint az első számítógépem agya, pedig ez csak egy billentyűzet.)
Viszont magát a billentyűzetet képként jeleníti meg. Nekem csak kb. félmillió képponttal kell számolnom, de az új gépeken ez megtöbbszöröződött. A képek mérete mellett eltörpül a - humán fogalmak szerint - gigantikus adatmennyiség. (jó, ettől még nem kell pazarolni.)
Viszont rögtön jött ebből egy másik kérdés is: a dokumentáció óvva int a képek gátlástalan használatától, mert elfogy a terület. Nem töröltem ki az elavult képeket (véletlenül), és érdekes módon nem kapok hibaüzenetet még sok-sok egész képernyőnyi tárolt kép mellett sem.
Megváltozott vajon a memóriakezelés, és nagyobb területet kap a program? A dokksi szerint 16 mbyte körül van minden program lekorlátozva, aminek már számításaim szerint el kellett volna fogynia. -
Karma
félisten
Mondjuk a Java enumoknak nem sok közük van a C-s formához, ahol nem volt több egy nevesített int konstansnál. Itt azért azáltal, hogy ezek singleton Java objektumok, amiknek saját metódusaik is lehetnek, sokkal vagányabb dolgokat össze lehet hozni. Például a Command GoF mintát elég triviális így megírni.
Hah, jó sokáig ültem a hozzászóláson.

-
diablo1984
veterán
sziasztok
twrp-s fullos mentésből lehet valahogyan flastoolos mentést csinálni? arra az esetre, ha a telefonon a kijelző nem kapcsolna be, mert akkor a flashtool-al még restore-ozható lenne......
-
thon73
tag
Meg tudná mondani nekem valaki az igazságot az Enum-ról? Csak a vitákat olvasom.
Egy négy elemű állapotot kell tárolnom (ON OFF WAIT HOLD), de ezt mintegy 1000 elemben, ahol az osztálynak csak egyetlen másik belső változója van, egy String. (lehet, hogy még lesz valami flag-szerű apróság)
Érdemes enum-ot használni, vagy tilos, ahogy az android útmutatja?
Ha tilos, akkor int-et használjak, vagy nyerek valamit egy byte alapú konstanssal.
Technikailag bármelyik elkészíthető, csak melyik a jobb?
Az érték szigorúan belső, az osztály belső állapotát regisztrálja. Kifelé majd csak egy ACTIVE vagy INACTIVE jelzés megy, ez a belső osztály csak azt írja elő, hogy ez mikor menjen ki.
Előre is köszönöm!
((Megjegyzem: a program képeket is használ, amik még ezen a tenyérnyi képernyőn is olyan hatalmasak, hogy az adatok mennyiség egyetlen kép mellett is eltörpül. Ezért törpölök azon, hogy kell-e foglalkoznom a memóriával?))
-
Horv
csendes tag
Bocs a dupláért:
Asszem megoldottam, rossz flagekhez adtam a libeket

Habár az android.mk fájl mintha ott se lenne, mert nem nagyon veszi figyelembe mit szerencsétlenkedek benne...
Viszont most a studio mindig más toolchainnal fordít, és sosem a jó mappában keresi a libet, pedig beállítottam az összes arch mappáját
Nem tudjátok, hogy lehetne beállítani android studioban melyik toolchaint használja az ndk?
-
Horv
csendes tag
Sziasztok!
Androidra és iOS-ra szeretnék egy alkalmazást, amit C++-ban írok meg. A wrappert a dropbox djinniével generáltatom, és eddig nincs is gond, viszont cpp oldalon használom az openssl könyvtárat. Lefordítottam armeabi, armeabi-v7a, x86 és mips archokra az openssl-t, és meg vannak a .so fájlok. Viszont az NDK-ban nem nagyon vagyok otthon, és nem tudom, hogyan lehetne linkelni az openssl könyvtárat.
Így néz ki az Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libssl_jni
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/openssl
LOCAL_LDLIBS += -L$(LOCAL_PATH)/../libs/system
LOCAL_SHARED_LIBRARIES := libandroid libdl libz libcrypto libssl
LOCAL_LDLIBS += -landroid -ldl -lz
include $(BUILD_EXECUTABLE)a build.gradle-be hozzáadtam a flagekhez az -lssl-t és -lcryptot, illetve a könyvtárakat is ahol keresse a linker.
De így is valamiért folyton undefined reference-t kapok minden SSL-s függvényre.
(Android Studio 1.3 stabilt használok 2.5-ös gradle-vel)
iOS-on sikerült életre kelteni az appot, a cpp és az ios-ra fordult openssl jó és tudja linkelni is, de az android nem akar összejönni...
Csinált valaki valami hasonlót, van valakinek valami ötlete?
-
musculus
tag
Kedves Szakik!
Mit gondoltok, ezt a bash scriptet hogy lehet android 4.4 alatt működésre bírni, nekem nem sikerült
http://hup.hu/node/137311
A rádió hangtár app egy irgalmatlan programozási hulladék
lefagy, mobilneten fél óra után elölről kezdi a fájlt, és ezek után a másfél centi a görgetőn bohóckodsz vezetés közben...Szerintetek?
előre is kösz
#!/bin/bash
if [ -z "$3" ];
then
echo "Nincs minden paraméter beállítva!";
echo "Paraméterek: ÉÉÉÉHHNN ÓÓPP PP";
echo "ahol első paraméter felvétel kezdésének dátuma, második a kezdésének óra-perc időpontja, harmadik paraméter a felvétel hossza PERCEKBEN, negyedik pedig az un. csendes (háttérben zajló) letöltés.";
echo "Ha nem szeretnéd, hogy outputra beszéljen a wget akkor negyedik paraméternek állítsd be: -b";
else
ulimit -f $((12*60*$3)); wget http://stream001.radio.hu:443/stream/${1}_${2}00_1.mp3 $4;
fi -
Karma
félisten
válasz
bucsupeti
#3322
üzenetére
Még nem csináltam ilyet, de a CONNECTIVITY_ACTION broadcastet próbáltad már?
-
bucsupeti
senior tag
Sziasztok!
A problémám a következő. Szeretnék egy frissítést beletenni az alkalmazásomba, ami egy vpn hálózatban elérhető szerverről töltene le egy JSON-t. A frissítést a háttérben szeretném megcsinálni akkor, amikor a VPN kapcsolat aktív lesz. Hogyan tudom detektálni azt ha aktiválják a VPN-t (McAfee EMM-el kapcsolódnak a VPN-re)
Néztem az McAfee EMM-nek nincs semmi olyan szolgáltatása ami broadcastolná ha kapcsolódott. Android szinten próbálkoztam a CONNECTION_CHANGE-re BroadcastReceivert állítani, de ez nem tüzel ha VPN címet kap a készülék.
Ha más megoldás nincs akkor beállítom hogy bizonyos időközönként nézze meg hogy elérhető-e a szerver és ha igen akkor frissítsen.
Arra gondoltam hogy szebb, jobb és biztosabb lenne ha észlelni tudnám ha új network interface aktiválódik.Ha a VPN bekapcsol akkor a NetworkInterface.getNetworkInterfaces() metódusával kapott listában megjelenik egy egy tun0 interfész is aminek az IP címe VPN-ből való.
Valahogy el lehet csípni ezt az eseményt amikor új IP címet kap a készülék?
Előre is köszi a segítséget!
-
Karma
félisten
válasz
crhis86
#3319
üzenetére
Mindenekelőtt rendet kell tenned a saját és a megrendelőd fejében. Mit jelent szerinted az, hogy az alkalmazás fut, de nincs előtérben? Miért és meddig kéne ilyen állapotban maradnia az alkalmazásnak?
Egyébként ha ez egy konzumer alkalmazás (tehát nem belső használatra készül, olyan környezetben ahol fix az áramellátás és az internet), egy ilyen akkuzabáló sűrű poll megoldás csak egy csillagot majd azonnal törlést, esetleg egy goromba hangulatú HVG cikket ér. Megfontolandó lenne rakni valamit a REST interfész elé, ami előtérben futó alkalmazásnál websocketen (vagy pèldául Pusheren) keresztül realtime öntené a kliensekbe az adatokat, háttérbe pedig a GCM-nek delegálná ezt. Persze minden esetben egyértelművé téve a felhasználónak, hogy tud kiszállni.
Az eredeti kérdésre visszatérve, egy started service lenne szerintem a megfelelő hely, ami ordered broadcastot küld, amikor új adat van. Ha van élő activity, akkor úgy csináld hogy ő kapja meg először, frissítve a UI-t, ha nincs, akkor meg alacsony prioritással a notif. frissítés fusson le.
-
crhis86
tag
Sziasztok,
Aránylag új vagyok Android fejlesztésben, ezért tanácsot szeretnék kérni a következőben:
Adott egy szerver, melyet bizonyos okokból csak pollozni tudok REST-en. Ezt elég gyakran meg kell csinálnom (kb. 1-2 másodpercenként) és az onnan jövő json-t feldolgozva update-elnem kell a UI-t: egy activity-ben is és akár a notification bar-ban megjelenő szöveget is (tehát nem biztos, hogy az activity előtérben lesz). Egy-egy ilyen művelet nem időigényes. Ennek az egésznek elég akkor megtörténnie, amikor maga az app fut az eszközön (tehát nem egy olyan service kell, ami mindig minden körülmények között fut).Nézegettem megoldásokat, de nem tudom melyik lenne a legjobb erre a feladatra. Talán egy IntentService-t hívogatva bizonyos időközönként lenne a legjobb megoldás, melynek eredményével megoldható a UI manipulálása is.
Van jobb ötletetek erre?
Köszi -
vlevi
nagyúr
válasz
kisvuk2
#3316
üzenetére
nem ide tartozik, de ha rendszer alkalmazás, akkor csak root browserrel fogod megtalálni
/data/app könyvtárban a "szokásos" alkalmazások vannak, amiket egyébként is látsz a telepített alkalmazások között
/system/app Ide már kell a root jog. Itt azok az alkalmazáso vannak, amik gyárilag előretelepítve vannak az eszközön.
És, kitkattól van a /data/app-private könyvtár. Itt is lehet. -
kisvuk2
csendes tag
Tiszteletem minden Nagy Gurunak!
Egy kérdésem lenne: barátom vett (kínai) fejegységet a kocsijába, kitkat 4.4 rendszerrel. Minden szép és jó, csak egy a baj: a canbus-on keresztül minden egyes liter üzemanyag fogyás után iszonyatos hangjelzés jön a gépből. A rendszerhangokat nem lehet állítani (legalábbis nem találtam ilyen menüpontot). Ha nincs csatlakoztatva a canbus csati, el sem indul a fejegység, van egy app, a canbus apk, de ezt én filekezelővel nem találtam meg, az alkalmazáskezelőben csak kényszeríteni lehet a leállítását, mást nem enged, de a következő jelre (ami pár másodperc múlva bekövetkezik) már indul is újra az apk. Valakinek nincs erre ötlete?
Előre is köszönet a segítségért! -
rgeorge
addikt
Van egy laikus kérdésem. Egy 4.0-s Android alkalmazásról lenne szó, ami itt nem kifejthető okok miatt adb shell parancsokkal kapja és küldi az adatokat PC felé. Ez 4.4-es eszközön nem megy, mert az alkalmazás visszaadja a PC-s alkalmazásnak azt az elérési utat, ahová másolni kell (Environment.getExternalStorageDirectory().getAbsolutePath()), és ez egy "/storage/emulated/0/" kezdetű útvonal. Ezt az adb shell nem látja, csak "/storage/emulated/legacy/" kezdettel. Mit lehet ezzel tenni?
-
diablo1984
veterán
válasz
lord.lakli
#3313
üzenetére
megkerestem, de az a topic halott!
itt a fejlesztés részhez a nyelv integráció tartozna és mondjuk egy hiba, amit nem tudom hol csúszik el....
-
lord.lakli
őstag
válasz
diablo1984
#3312
üzenetére
Hivatalosan ez android szoftverfejlesztős topik. A teló fórumát keresd meg.
-
diablo1984
veterán
sziasztok!
adott egy telefon, ami már 2 éves és járt rajta pár rom(lenovo a800) és olyan hibába ütköztem, hogy egy korábbi romot raktam rá, de a lenovo logonál megáll a tudomány, onnan nem megy tovább! mondom én vagyok a hülye, wipe-oltam, újra feltoltam, megint addig jutott, sőt azóta próbáltam még 4 romot, az is a lenovo felíratnál megáll!
flash tollal tooltam fel egy orosz romot, az felmegy, el is indul, csak nem magyar!2 kérdésem lenne:
- ha recoveryvel így járok, akkor hol lehet a hiba, már recovery-t is cseréltem, de nem változott a helyzet
- az orosz romba vajon bele lehet-e rakni a magyar nyelvet? mert a flash tool az azt az orosz romot fel tudja tolni úgy hogy el is induljon...... -
thon73
tag
Hát, ne egy hétköznapi billentyűzetre gondolj. Valójában akivel terveztük/teszteltük könyveket ír rajta több nyelven. Az eredetileg gigantikusnak gondolt határértékek a keze között akadállyá váltak: jelenleg 10 (külön keskeny és széles) layout a teszt, akár több, mint 1000 tényleges billentyűvel.
Ha ehhez hozzávesszük, hogy egyetlen billentyű leírásához akár 20 token is kellhet; ill. hogy ez legalább 2500 objektum; ráadásul egy igen részletes log is tartozik hozzá - akkor már nem is olyan sok az az idő. De az oroszlánrészét az objektumok veszik el, meg persze GC is dolgozik közben - a log tanúsága szerint.Mindegy, három próbálkozáson keresztül jutottunk ide, és ez jónak tűnik: nagyon gyorsan és könnyen módosítható, és mindent tud, amit szeretnénk. No persze, az okostelefon elgondolásba ez a (mondjuk log nélkül talán) 10 másodperc már nem fér bele, tegyük hozzá a három sem. Ezért szeretném pontosan ezt: szétválasztani a kettőt. Akár install során legyártja a szükséges adatokat, aztán a mentés meg a töltés már nem sok idő.
A Broadcast ötleten is gondolkodtam (ez jó, hogy példa is van hozzá), de az egyik előző elgondolásban az előző karakter átírását a DELETE majd ÚJKARAKTER elküldésével oldottam meg. legnagyobb meglepetésemre teljesen összekeveredett a sorrend, az elküldött értékek nem ugyanabban a sorrendben érkeztek meg. (A doksi csak arra hívja fel a figyelmet, hogy ez ún. IPC - vagyis nagyon lassú. De keveredésről nem volt szó.) Megoldható persze, egy blokkban kell a kettőt (néha többet) elküldeni. Épp csak attól tartottam, hogy a Broadcast még tovább rontja ezt az időt - talán az editor kellene a receiver legyen, de ez persze nem realitás.
Ebben a Broadcast megoldásban elmélyedek, mennyire nehéz bele-aplikálni. (Loadernél használtam, ott nagyon jó volt)
Még egy kiegészítés:
Amúgy a Broadcast megoldás is singletonnal operál a példában (ami gyári); no ezt csak azért írom, hogy csak azért betenni, hogy egy másik singleton-szerű megoldást kiváltson, lehet h. felesleges.Szerintem kipróbálom mind a hármat (referncia átadása - service elérése singletonként - broadcast; aztán meglátom, mennyire idő/helyigényes és mennyire dönti romba a kód szépségét

-
Szmeby
tag
Nem sok az a 10-20 másodperc? Biztos nem lehet rajta gyorsítani? Ez borzasztóan soknak tűnik. Egy pc ennyi idő alatt megszámlálhatatlanul sok objektumot tud gyártani. Még néhány full gc is megfuthat közben.
Gondolom az io viszi el az idő nagy részét, de kizártnak tartom, hogy az android ne tudná ezt a fájlt már induláskor cache-elni. Hiszen előszeretettel használ ui leíró config xml-t. A legkevesebb, hogy ezt gyorsan tudja is használni.Ha először váltok egy másik billentyűzetre, nekem azonnal megjelenik a cucc, szóval valahogy tuti meg lehet ezt oldani. Opensource, (elvileg) saját billentyűzetet is tartalmazó app: Keepass2Android. Talán segít.
Az android dev tutorial egy mondattal elintézi a dolgot: preload, de semmi részletezés, hogy hogyan kellene. Egy pörgő animáció a billentyűzet helyén nem tűnik valami szép megoldásnak.
Olyan lifecycle eseményhez nem tudod kötni az objektumok legyártását, vagy legalább a fájl felolvasását, ami nem a billentyűzet kiválasztása esemény? Hanem valami korábbi időpont. Mondjuk a telefon elindulása.

Ezt találtam, nem egy komplex billentyűzet, de én nem látom, hogy az InputMethodService referencia bárkinek is átadásra kerülne. Viszont a getCurrentInputConnection() meg a BroadcastReceiveres megoldás érdekesnek tűnik azzal a queueval. Bármit is csinál...
-
thon73
tag
Így már értem, és az utolsó szaváig egyet is értek vele. Az ördög az Android felépítésében rejlik, ezért csak a konkrét részekkel foglalkozom, a többi az absz. úgy van, ahogy írod.
Az InputMethodService felelős a billentyűzetért, ami ugye a képen van, tehát UI. Sajnos ez a Service igen gyengén dokumentált, többnyire a forráskódból meg próbálkozásokból jöttem rá egy-két dologra.
A mi szempontunkból fontos: a billentyűzet kiválasztásakor elindul a service és örökön-örökké él, amíg új billentyűzetet nem választ ki a felhasználó. No, és persze egyetlen példányban él. De ha szigorúan akarok fogalmazni: nem singleton, legfeljebb hasonló.
A service elindításakor szükség van valamilyen adatstruktúrára, ami a billentyűzetet reprezentálja. Az első megvalósításban ezt a struktúrát egy leírófájl alapján maga a service készíti el; ami leginkább idő. Ez a rész háttérszálon fut, de akkor sem tudom a billentyűzetet használni, amíg kész nincs. Ez persze idő, akár 10-20 másodperc is lehet; igaz csak a billentyűzet legelső kiválasztásakor kell kivárni. Nem tudom külön előkészíteni, mert a konkrét gép adatira is szüksége van. Viszont ezt szerettem volna úgy különválasztani, hogy mondjuk egy program legenerálja a használható adatstruktúrát (oké, ez egy fél perc), aztán azt az adatstruktúrát már azonnal tudja használni a service.
A speciális View egyik metódusa (onTouch()) kerül meghívásra érintéskor, egy másik (onDraw()) rajzoláskor. Az eddigieket nem én találtam ki, ez gyárilag így van.
Természetesen az onDraw() is eljut a példánkban Button-ként szereplő osztályig, ami megrajzolja a billentyűt (ennél kicsit bonyolultabb a dolog, mert egy köztes képet használ, de ez nem érdekes), és persze az onTouch() végrehajtása is a Button()-on keresztül történik, pontosabban a Text és Key további osztályokon, mert egy Button (joystick pl), akár négy ilyet is tartalmazhat. A lényeg csakis annyi, hogy az egész hosszú struktúrán végiggörgetem a referenciát, egészen pontosan úgy, ahogy írod. Mert ugyanis a leütött billentyűt CSAK a legelsőként szereplő Service tudja elküldeni. Van emögött persze logika, de néhány lépésben nehéz megfelelni neki.
A végső kérdés abszolút android specifikus: ennek a nem-singelton, nem-teljesen-standard-service, nem-minden-ízében-ismert InputMethodService-nek a referenciáját - vagyis inkább annak az átadását ki tudom-e kerülni valahogy. Magával az InputMethodService-szel nagyon kevesen foglalkoznak (szerintem), ezért örülnék, ha lenne valakinek tapasztalata vele.
Az állapot kérdésére meg nem tudok válaszolni. Ez egy bővített gyári osztály - fogalmam sincs arról (és doksi sincs), hogy egészen pontosan hogyan viselkedik. Azért persze valamennyit már tudok róla, csak félek, ez kevés, hogy egy ilyen huszárvágást bátran megcsináljak.
Az apróságokra:
jogos, én sem text-nek hívom, hanem packet-nek, amiből kettő van: vagy stringet vagy hard-keyt (kódot) tudok átadni. De ez a referencia utazása szempontjából csak még egy lépcső...A felsorolt opciók közül jelenleg 1-es működik. 2-est érzem megvalósíthatónak. A 4-es a kérdés, van-e ilyen, esetleg 3-assal kombinálva.
((A programozási cikket sajnos már nem találtam meg. Én magam nem vagyok elég felkészült, hogy bármi ilyen vitában részt vegyek, de a cikk nagyon érdekes volt. A "lineárisra" emlékszem, lehet, hogy rosszul idéztem, minden estre számomra a nem objektum-orientált, nem event-driven struktúrát jelentette (mondjuk basic
?). Nem ide tartozik, de nagyon tetszett a hasonlat, amit az egyik fél alkalmazott: Az objektum orientált programozás nagyon jó, de ha szükség van egy banánra, akkor meg kell teremteni hozzá a majmot is, meg az egész őserdőt. Bocs, ha ez se pontos. És még egyszer: részemről ez semmilyen állásfoglalás, tényleg nem tudok mit mondani róla; épp csak feldobtam, hogy ilyen is van a nap alatt.))Nagyon köszönöm a választ, mert segítettél továbbgondolni, és így a probléma is sokkal jobban kezd körvonalazódni bennem!
-
Szmeby
tag
"Bár ezzel a válasszal nem sokra mentem."
Szóval van állapota? Van unit teszt?De mindegy is, inkább írok.
A singleton önmagában nem ördögtől való. Probléma akkor lehet, ha van állapota, és azt a tőle függő komponensek változtathatják. Ugyanis ha a sigletonban van field, és az nem csak olvasható, akkor nem tudod előre megjósolni, hogy a singletonod éppen milyen állapotban van, mivel azt a komponensek kedvük szerint állítgatják. Sztochasztikussá válik a viselkedése. Ugyanez igaz a random vagy az idő használatára is. A random viselkedés pedig rejtett bugokat szül.
Info: shared global stateTegyük fel, téged ez a veszély nem fenyeget, mert nincs benne field, vagy az csak olvasható. Ilyenkor még mindig probléma lehet, ha a singletont használó osztályaidat (unit) tesztelni akarod. Pl.:
public class MyClass {
//...
public String doingSomethingCool(String id) {
Entity e = MyDatabaseAccessorSingleton.getInstance().findById(id);
// ...
return coolStuff;
}
}Hogyan teszteled a metódust, ha nem szeretnél mellette egy működő adatbázist is futtatni. Sajnos sehogy.
Lehetséges megoldás:
public class MyClass {
private final MyDatabaseAccessorSingleton db;
public MyClass(MyDatabaseAccessorSingleton db) {
this.db = db;
}
//...
public String doingSomethingCool(String id) {
Entity e = db.findById(id);
// ...
return coolStuff;
}
}A teszt immáron helyettesítheti az adatbázisos objektumot egy teszt double (mock) példánnyal. Ez esetben viszont már megkérdőjelezhetővé válik, hogy valóban szükséges-e singletonként definiálni azt. De ez már messzire mutat.
Leszámítva a fenti két problémát a singleton egy tök jó pattern, és bátran alkalmazhatod, ha szükségét látod. Csak ésszel kell csinálni.
Ez talán válasz arra a kérdésedre, hogy a contextet miért nem oldották meg így. A contextnek szerintem van változó állapota. Ebből singletont csinálni egyenlő a káosszal.
-----
Áttérve a konkrét problémára. Sajnos tényleg nem ismerem az android architektúráját, és lehet, hogy a singletonnal jársz jobban. Ezt megerősíteni és cáfolni sem tudom. Majd a tapasztalt androidosok biztos leírják a véleményüket.
Remélem, nem értelmezem félre a dolgot, de nekem az jött le, hogy az InputMethodService megsérti az SRP principlet, mert nemcsak az a dolga, hogy felépítsen egy billentyűzetet (KeyboardView - GeneralKeyboardData - Keyboard - Button - Text), hanem ki is kell szolgálnia a billentyűzetre tapicskoló eventeket. Ezt talán célszerű lenne két külön osztályban megvalósítani. Talán te is pont ezt írtad.
Legalábbis ha jól értem, hogy az "adatstruktúra" alatt a billenyűzetet érted, rajta a gombokkal, textekkel.Véleményem szerint az elnevezések alapján az event fogadása nem feltétlenül a text feladata, hanem a buttoné. Legalábbis ha én olvasok egy kódot, akkor arra számítok, hogy a text csak a gombon lévő szöveg tartalmáért felel, annak stílusáért, stb. Az esemény pedig a gombon keletkezik. De ez akár elnevezési probléma is lehet. Én mindenesetre a gombra fogok hivatkozni, a textet nagyon nem ideillőnek érzem.
Szóval a gombok event listenere pedig továbbpasszolja az eseményt egy event handlernek (talán az InputMethodServicenek?), ami elvégzi a gombnyomás mögé rejtett logikát. A gombnak tehát szüksége van ebből egy példányra, hiszen mit ér a gomb, ha nem csinálhat semmit.
Nincs sok lehetőség:
1. Leküldöd a billentyűzet legyártásakor minden gombnak ezt a referenciát.
2. Vagy csak a GeneralKeyBoardDatáig. Bár akkor a GeneralKeyBoardData példányt kell majd továbbpasszolnod a gombok felé, hogy azok lekérdezhessék. Tehát ígyis-úgyis utazik lefelé egy referencia, így ha ez a megoldás nem hoz látható javulást, akkor nem éri meg, csak ront az átláthatóságon.
3. Használod a gombban a singletont.
4. Használsz valamilyen android hókuszpókuszt. Az előző hozzászólásomban a contextre gondoltam, legalábbis a neve alapján arra asszociáltam, hogy ezen keresztül elérhetők ill. elérhetővé tehetők a szükséges komponensek. A válaszodból az jött le, hogy nem."Vagy valahogy kiszedem az InputMethodService hivatkozását magából az InputMethodService-ből"
Ezt nem értem, itt a singleton.getInstance()-ra gondoltál, ugye?Nekem ez az egész egyébként UI-szagúnak tűnik, és backend fejlesztőként én úgy gondolom a UI-t nem is igazán kell tesztelni. Legalábbis nem így. Állapota meg biztos nincs, ugye? Szóval menjen az a singleton!

Sajnálom, hogy nem tudtam érdemben segíteni, csak a java oldalt ismerem.
Senki sem fog programozási paradigmákról flame wart indítani, annyi féle létezik, imperatív, deklaratív, oo, stb, egyesek valamennyire átfedésben vannak másokkal, mindegyiknek van előnye és hátránya, ostobaság lenne erről vitatkozni. A programozás úgyis arról szól, hogy kiválaszd a neked/projektnek megfelelőt, és megtanulj együtt élni a hátrányaival.
Vagy készítesz egy új programnyelvet, új megoldásokkal, és majd csak utána jössz rá, hogy a többinél nem jobbat alkottál, csak másabbat.
Szóval a "komoly" emberek vitassák bátran az oo-t, ha nincs jobb dolguk. Én is fel tudok hozni egy csomó hátrányt az OOP-ben, de ugyanúgy a funkcionális nyelvekben is, stb. De miért tenném? A világ nem lesz jobb, ha elkezdek fikázni egy paradigmát, vagy egy nyelvet.
Amit viszont én írtam (static hívások, globális állapottal, javaban) az egy erősen kisarkított példa volt, természetesen ironizáltam. Bele kell törődni, hogy a java egy oo nyelv, és a szabályokat ugyan meg lehet szegni, csak hosszútávon legtöbbször nem éri meg.A "lineáris programozás" alatt mit értesz?
-
thon73
tag
Köszönöm. Bár ezzel a válasszal nem sokra mentem.
Megpróbálom kicsit érthetőbben elmagyarázni. Az InputMethodService több billentyűzet adatait tartalmazza a nagyjából a következő módon:
InputMethodService - KeyboardView - GeneralKeyboardData - Keyboard - Button - Text
Természetesen egy kicsit összetettebb az egész, de a sor minden egyes gomb esetén ezen alaposztályok leszármazottaiból áll össze. A sor végén álló "Text" pl. definiálja az "A" karaktert (néhány egyéb tulajdonsággal, pl. hogy . után legyen nagy, meg ilyesmi.)
A mi szempontunkból az egyetlen lényeges dolog, hogy amikor a "Text" osztály el szeretné küldeni az 'A' karaktert, akkor az InputMethodService osztály metódusaira van szüksége. (Amire viszont senki másnak.)
Eddig pont ugyanúgy oldottam meg, ahogy pl. a Context-nél történik (Tehát nem a service-t szerettem volna contextből kinyerni.), vagyis az InputMethodService szépen végigutazott az egész soron, és az összes "Text" példány tárolta a hivatkozást, hogy tudjon kommunikálni.
A változáson pedig azért kezdtem el gondolkodni, mert szerettem volna az egész adatstruktúra legenerálását leválasztani a Service-ről. Emiatt viszont az InputMethodService nem áll rendelkezésre akkor, amikor az adatstruktúra elkészül.
Több lehetőséget találtam:
Amikor a kész adatstruktúrát a Service-hez kapcsolom, végigmegyek az összes elemen és megadom az InputMethodService-t.
Vagy egyedül a GeneralKeyBoardData (az adatstruktúra legalsó eleme) kapja meg, és a Text ettől kérdezi le.
Vagy valahogy kiszedem az InputMethodService hivatkozását magából az InputMethodService-ből, amiből egyébként egyetlen van, és addig folyamatosan él, amíg nem váltok másik billentyűzetre (ilyenkor viszont az adatstruktúra sem létezik tovább.)Amúgy eddig az "erőltetett objektumokkal" szépen működik, de azt gondoltam, kell legyen ennek egyszerűbb módja is. Csak éppen még nem jöttem rá, mi az, ezért kértem segítséget az utolsó elgondoláshoz.
((A fentiektől függetlenül filozófiailag "sok hülye meg erőlteti itt az objektumokat" kijelentésnek igen komoly háttere van. Nagyon sok, nálamnál sokkal komolyabb programozó vitatja az objektum-orientált programozás előnyeit szemben a hagyományos, lineáris programozással. Mielőtt mindenki nekem ugrana és szétszedne, nem állást foglaltam mellettük, csak tényként megemlítettem ezt az iskolát is. Én ugyan nem tudom megítélni, de valószínűleg amúgy a java egy objektum-orientált android környezetben nem is alkalmas erre.))
-
Szmeby
tag
A Servicenek van állapota?
Amúgy próbáld meg unit tesztelni a singletonra hivatkozó osztályaidat, és rájössz, miért nem jó.
Persze a célnak megfelel, csupa static hivatkozással is lehet programot építeni, a sok hülye meg erőlteti itt az objektumokat, mi?
Én nem érteni Android, de minek van a context, ha abból sem nyerhető ki a kívánt service?
-
thon73
tag
Véleményt szeretnék kérni:
Van egy Service (InputMethodService). A feladatokhoz a Service metódusai szükségesek. Ezért egy elég gigantikus (adat) osztályhalmaz (melyet a Service rak össze) minden egyes példányának átadtam a Service-t, hogy meg tudja hívni a metódusait. Kicsit hasonlóan, ahogy a Context utazik.De:
A Service egyúttal egy singleton is. Megtehetem-e, hogy a Service-n belül egy static metódus visszaadja magát a service-t, és akkor nem kellene az egész osztály-kaszkádon végig átadnom a címét?
Igazából nem látom, hogy ez miért ne működne (ugyanúgy mint egy sima singletonnál), de valamiért mégsem látok erre példát. Pl. a context-et miért nem oldották meg ugyanígy?
Köszönöm, ha útba igazítotok!
-
Karma
félisten
Semmi sincs kőbe vésve. Bármikor nyomhatsz egy New -> Activityt, ott kiválaszthatod megint a szimpatikus sablont, sőt még launcher activitynek is jelölheted. Az AndroidManifest.xml-ben elég látványos, mi alapján kerül a launcherbe valami, kézzel is oda rakhatod, ahova kell.
Egyébként javaslom ezt a cikket végigolvasásra és alapnak felhasználásra. A Design Support Library elég sok nüanszán végigvezet.
Új hozzászólás Aktív témák
- Apple iPhone 16 128GB, Kártyafüggetlen, 1 Év Garanciával
- Akció! HP ZBook Firefly 14 i7-1165G7 16GB 512GB Nvidia Quadro T500 4GB 14" FHD 1 év garancia
- BESZÁMÍTÁS! ASUS H510M i5 11500 16GB DDR4 512GB SSD RX 6600XT 8GB Zalman T4 Plus Cooler Master 700W
- BESZÁMÍTÁS! MSI B450M R5 5600X 32GB DDR4 512GB SSD ASUS ROG STRIX RTX 3070Ti 8GB Zalman Z1 PLUS 750W
- Akciós kisWorkstation! Dell Precision 3560 i7-1165G7 4.7GHz / 16GB / 512GB / Quadro T500 2GB FHD 15"
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
exDebug.... valami error azt már nem tudtam előidézni.
Attól hogy van egy jó kalapácsod, nem lesz mindenből szög.



Ja és ezentúl jobban odafigyelek 





