- Három Pixel 9 is lebukott
- Samsung Galaxy A54 - türelemjáték
- Fotók, videók mobillal
- Mobil flották
- Redmi Note 13 Pro+ - a fejlődés íve
- A Galaxy A54 és az A34 is megkapta a One UI 6.1-et
- ReVanced patch-elt alkalmazások és Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Samsung Galaxy S21 FE 5G - utóirat
- Motorola Moto G54 5G Power Edition - nem merül le
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Elektromos rásegítésű kerékpárok
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
Hirdetés
-
TopSpin 2K25 teszt
gp Djokovic nélkül ugyan, de bő évtizedes kihagyást követően visszatért a TopSpin-széria – itt van minden Grand Slam, de vajon a játéknak mekkora esélye van a világelsői címre?
-
Teljes az összecsapott Motorola csúcsmobil tudáslistája
ma A Razr 50 Ultra sebességére nem lesz panasz, az üzemidő viszont még kérdéses.
-
Hamarosan bárki hazavihet egy Apple Vision Pro headsetet
it A Bloomberg szerint az Apple arra készül, hogy az USA-n kívül is piacra dobja a drága Vision Pro headsetet.
Új hozzászólás Aktív témák
-
thon73
tag
Egy kis olvasás után jobban meg tudom fogalmazni a kérdésem:
A BaseAdapter legnagyobb része UI szálon fut, tehát használhat a program többi részével közösen egy olyan ArrayList-et, amit a többi rész is csak UI szálon módosít.
A BaseAdapter egyúttal Filterable is lett, vagyis tartalmaz egy Filter.performFiltering metódust, ami viszont egy Worker thread-en dolgozik, ÉS olvassa a fenti ArrayList adatokat.
Én úgy látom, hogy csak a Filter.performFiltering területén kell védenem ezt a közös ArrayList-et a módosítástól.
Mi lenne erre a leghatékonyabb módszer? ((Vehetünk két helyzetet is: kis méretű és extra nagy méretű listák, ahol a filtering is sokáig tarthat))
Vagy valamit teljesen rosszul értek?Természetesen az osztálynevek a felmenőket jelentik, mindegyikből van saját.
[ Szerkesztve ]
-
thon73
tag
No, úgy tűnik, sikeresen beletenyereltem valamibe, ami messze meghaladja a tudományom. Ami megnyugtat: nem csak az enyémet. Tanulás céljából ajánlom a következő cikket: [link]; szerencse h. az említett professzor volt olyan kedves, és a pórnépnak is csinált biztonságos osztályokat...
Kibogoztam az ArrayAdapter source-kódját is. A konstruktorban megadhatjuk a felhasználni kívánt ArrayList-et, melyet = jellel tárol a belső változóban.
Ezt követően a Filter() rész pont azt csinálja, amit én: lock-olja a belső változó hozzáférését, és végigolvassa a tömböt (pontosabban átmásolja egy másikba). Ez azonban NEM szinkronizált cselekedet, uis. időközben egy másik programrész (akár UI szálon,mert a Filter worker-szálon van!) módosíthatja az eredeti tömböt. Vagy összeomlik, vagy exception-t kapunk. A saját változatomban (belassítottam a filtert) sikerült is a hibát produkálni.
Ált. persze nem lesz hiba, egyszerűen azért, mert a Filter (ha egyáltalán használjuk), sokkal gyorsabban lefut, semmint változna közben a tömb. De ha a Filter lassul - akkor máris előjöhet a hiba, még a legegyszerűbb listában is. Az én problémám nyilván szélsőséges (túl nagy a lista), és valójában a filtert nem is akartam használni (pont a lassúsága miatt), de a logikai hiba az akkor is logikai hiba.
Elvi megoldást úgy találtam a magam számára, hogy készítek egy ArrayList leszármazottat, amit a Loader fel tud tölteni, távolról változtatható - de csak akkor, ha a Filter nem állítja le a működését. Pl. úgy, hogy a filter teljesen más metódussal vesz ki elemeket; ha a tömb változik, akkor ez a lehetőség lezárul, úgyis megváltozott a szűrni kívánt anyag.
Gondoltam, megosztom a gondolataimat, hátha mást is érdekel ez a kérdés. De, mint fent írtam, ez kicsit több, mint amit biztonságosan átlátok, így aztán ha hülyeséget gondolk, kérlek, javítsatok!
-
eastsider
nagyúr
köszi!
kerestem a topikba, és láttam Te is ezzel szenvedtél...
szóval akkor legyen egy újabb fragment, amit akkor hívok meg, ha updatelek..
a dialogfragment az felejtős akkor (dialogfragmentből)?ez a nested fragment ez ilyne magic lehet, ahogy utánakerestem....
[ Szerkesztve ]
-
eastsider
nagyúr
szerintem is így tiszta, ezzel még nem volt gondom
esetleg a backstack szempontjából nem feltétlenül mindegy, hogy dialog vagy sima fragment. (meg az átláthatóság miatt)más kérdés:
ilyen értékeket hogy tárolnátok db-ben?
[link]
CRUD szempontjából érdekel, nem tudom hogy tudnám megjeleníteni ilyen módon...[ Szerkesztve ]
-
eastsider
nagyúr
fúha. a második válaszodat még elemzem (annyira nem jött át)
egyelőre számolni nem szeretnék vele (igen lehetne számolni az ISO-Aperture-shutterSpeed párosból. h egyik változtatásakor mi lesz a többi..
viszont ha stringként letárolom nem tudom mennyire számít igénytelennek
egyébként attól függ hány fényértékenként van a beosztást....egyébként a number pickert mennyire illik stringgel feltölteni?
-
vz12
tag
Az előbb megszámoltam, 48 nagybetű + 47 kisbetű = 95 db ékezetes betű van a Map-omban, és nekem az indexem a unicode-os karakter, '\uxxxx' formában, mert amúgy az Eclipse beszólt, hogy a .java fájlomban "illegális" karakter található.
Nekem kb. 2 éves installációm van, és bevált dolgokon nem változtatok ...
Persze ha valami gond lenne, akkor nyilván rákényszerülnék, de egyrészt tesztelem a szimulátor(ok)on túl 2-3 kütyün, 2-es és 4-es androidon is, másrészt szerintem nagyon extra dolgokat nem használok, harmadrészt van már pár száz letöltésem a Play-en szerte a nagyvilágból mindenféle eszközre, de senki és semmi nem jelzett semmiféle problémát még.[ Szerkesztve ]
-
Karma
félisten
Semmiképp se mátrixszal! Úgy kiszaladsz a memóriából, mint a huzat!
Helyette a BitmapFactory.Options.inSampleSize lesz a barátod, ezzel csak minden n-edik pixelt dolgozza fel az Android a képből, nagyságrendekkel csökkentve a memóriaigényt.
Ezt elmulasztani a halálfejes hibák egyike.
“All nothings are not equal.”
-
thon73
tag
Bocsánat, még egy kérdés az optimalizálásról.
Van egy - mondjuk 1200x800 pixeles képem, amit az onDraw helyez bele a Viewbe így:
canvas.drawBitmap(skin, null, dst, null);
(Rect dst értékét az onSizeChanged-ben szedem össze, gyakorlatilag a View mérete, a bitmap dekódolása, közelítő átméretezése meg a konstruktorokban van.)Kérdés:
Mivel rajzolok a bitmap felszínén (egy pont követi az ujjamat), ez a drawBitmap() minden alkalommal lefut. És minden alkalommal ismételten átméretezi a bitmap-et. (Hol 798, hol 356 stb a View mérete, pl. ahogy forgatom a készüléket.)Ezt kell-e v. lehet-e optimalizálni? Az inSampleSize segítségével már megközelítőleg ekkora képet csináltam, de nem pontosan ekkorát. Vagy ez nem akkora terhelés? Végül is elég gyorsan fut...
-
thon73
tag
Azt hiszem megoldottam, bár lehet, h. nem ez a legoptimálisabb. A grafikában nem vagyok otthon. (A nem ide tartozó részek hiányoznak a kódból.)
private Bitmap skin;
private Bitmap skinscaled;
private void init()
{
skin = BitmapFactory.decodeResource(getResources(),
R.drawable.portrait);
}
protected void onSizeChanged (int w, int h, int oldw, int oldh)
{
skinscaled = Bitmap.createScaledBitmap( skin, w, h, false);
}
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap( skinscaled, 0f, 0f, null);
}Egy további kérdés még felmerült bennem: az onDraw-ban megkapott canvas-szal csak az onDraw-ban rajzolhatok (invalidate után mindent újra), vagy máshol is rajzolhatok rá, olyat, amit nem kell letörölni a következő rajz előtt? (Az ujj húzásának az útját mutatja; felemelésig)
-
Karma
félisten
Ez a jó megoldás
Azzal a Canvasszal csak onDrawban rajzolhatsz, különben nem lesz hatása. Nem szabad referenciát eltenned arra a példányra.
Viszont nincs akadálya annak, hogy saját Canvast hozz létre egy saját Bitmap köré, mint például ez az átméretezetted, amire akkor rajzolsz amikor akarsz.
Itt van egy kis infomorzsa.
[ Szerkesztve ]
“All nothings are not equal.”
-
Karma
félisten
-
thon73
tag
Úgy tűnik, mindig túlságosan elvarázsolt problémákkal találkozom...
Hátha mégis valaki beleütközik ugyanebbe, megválaszolom magamnak.
Megdöbbentő módon az Android valójában csak kétféle módon tudja a bitmap színeket kezelni: ARGB_8888 és RGB_565 kódolással. (Létezik, de nem javasolt az ARGB_4444. Létezik, de nem működik a getPixel() metódussal az ALPHA_8)
(((Nekem még nem okozott problémát, de a megjelenítés ált. RGB_565-tel történik, vagyis valahol az ARGB_8888 mindig átalakításra kerül.)))Egy "térképet" szerettem volna megrajzolni (ezért nem jó egy tömb) 512 különböző színnel. A szinek nem lényegesek, az viszont igen, hogy pont azt a színt "vegyem ki", amit a képbe belerajzoltam. A korlátozott hely miatt arra gondoltam, hogy valamelyik helytakarékosabb kódolást fogom választani.
Ez viszont egyáltalán nem egyszerű, mert a getPixel által visszaadott alapszínek(R,G,B) mindig 256 árnyalat terjedelműek lesznek - nem pedig a kódolással azonosak. Továbbra sem találtam metódust a "raw" színérték megszerzésére.ARGB_8888 alatt persze minden tökéletesen működik, hiszen itt minden alapszín 256 árnyalattal kódolt. Ehhez azonban dupla hely kell...
ARGB_4444 alatt az alapszinek 4 bit terjedelműek, vagyis 16 árnyalatuk van. Ha azonos színt akarunk visszaszerezni, akkor a szinek 4 bites értékét dupláznunk kell: 2->22 8->88 c->cc (hexában). Az ilyen, hexában azonos számjegyekkel bíró színeket megadva (pont 16 van) ugyanazt a színértéket kapjuk a getPixellel, mint amivel rajzoltunk.
Persze, semmi nem elég, nekem az RGB_565 kódolású rajzból kellett azonos színeket kiszednem. A source kód a dithering miatt elég elvarázsolt, nehéz kideríteni, hogy pontosan hogyan kódol, ill. sokkal összetettebben kódol, mint amire ehhez a feladathoz szükség van. Matematikailag a következő összefüggést találtam:
5 bites szinek - R és B, 32 árnyalat: setPixel( árnyalat * 8 + 5 ) beállítás után a getPixel() / 8 visszaadja az eredeti árnyalatot.
6 bites szín - G, 64 árnyalat: setPixel( árnyalat * 4 + 2 ) beállítás után a getPixel() / 4 szintén az eredeti árnyalatot adja vissza. ((Megjegyzem, az első 32 árnyalatra az előző összefüggés is működik))Bocs, ha valakit untattam ezzel, de nekem hosszas fejtörést okozott, hogy megtaláljam azokat a színeket, amiket beállítva ugyanazt az értéket kapom vissza. Megjegyzem, hogy több különböző alapszín árnyalatot ezek a kódolások nem is tudnak tárolni, az összes többi "bemeneti" szín ezen árnyalatok valamelyikére redukálódik.
Még annyit tennék hozzá, hogy amennyi info-t találtam, az Android ebben is elég egyedi. Vannak 565-888 színkódolás átalakítások, de mintha az android egyiket sem követné, hanem valami saját algoritmusa lenne.
-
LordX
veterán
Az az érték "duplázás" az ARGB4444-re _nagyon_ meredekül hangzik. Felfelé konverziónál mindig 0 bitekkel kell kitölteni / megfelelő 2 hatvánnyal szorozni / x bittel balra shiftelni. (Azaz ARGB4444 -> ARGB8888 esetében az alsó 4 bitek mind nulla.)
Ugyanezért a +5 és +2 is eléggé gyanús, miért kéne úgy működnie. A visszaosztásnál meg persze, hogy visszakapod az eredeti értéket, mert gondolom egész osztás van..
-
thon73
tag
Sőt, továbbmegyek. Valószínűleg inkább egy Loader-re lenne szükségem, ami a Service inicializálását elvégzi. Találtam egy ilyet Can you use a LoaderManager from a Service?
Van ezzel valakinek tapasztalata? Akár az AsyncTask, akár a Loader nagy segítség lenne... Jelenleg van egy 4-5 mp-es előkészítési idő, amit a rendszer már nem enged meg. ((De csak egyetlen egyszer, amikor a service-t először elindítom.)) Köszönöm! -
vlevi
nagyúr
Nem veszíted el.
Pusztán arról van szó, hogy az egész számként tárolt színek között lesznek negatív számok is, de attól még az az információ ott van.
Az, hogy az int előjeles, nem számít.
Az előjeles számok annyiban különböznek az előjel nélküliektől, hogy a bináris számábrázolásban a legfelső bitet előjelként értelmezik, és nem számként. Egy előjel nélkül 1 byteon tárolt érték emiatt lehet 0-255, de ha előjelesként értelmezed, akkor -128 és 127 közti érték lehet.
Ahogy a class leírása is írja, a fekete szín pl. -16777216 (0xff000000).
Tulajdonképpen az összes szín egy negatív szám lesz, (majdnem mind), mert a 4 byteból az első az áttetszőséget jelenti, ahol 0 a teljesen áttetsző, és 0xff a teljesen lefedett. Ebből az is egyenesen következik, hogy ha az áttetszőség értéke 128-at meghaladná, akkor az egy negatív szám (azért, mert akkor az 1 byteon tárolt érték legfelső bitje 1-es lesz). De azon az 1 biten tárolt információ akkor sem vész el.. -
Sianis
addikt
Amúgy én inkább color resource-ba tenném, tehát XML-be. Utána pedig getColor(). Resource objektumot pedig alkalmazás context-ből is lehet szerezni.
Illetve te is jobban jársz, ha XML-be defniálod a színt, mert az IDE pl simán odarakja mellé egy négyzetbe, hogy milyen szín, valamint rendesen van nevesítve.
-
WonderCSabo
félisten
Azért annyira nem bonyolult az Ora JDK telepítése.
-
thon73
tag
Bocs, tudom: google a barátom
Megvan a hiba meg a megoldás is: How to fix font anti-aliasing in IntelliJ IDEA when using high DPI?
Aj, pedig úgy tűnt, hogy ezt most télleg minden gond nélkül feltette. De aztán mégse. -
WonderCSabo
félisten
Én egy gépen dolgozom alapvetően, de rengeteg megosztott projekten, ezek általában git repóban vannak. Manapság egyre jobban törekszenek a projektek hordozhatóságára is, pl. egy gradles projekthez alig kell valami, hogy leforduljon repóból checkoutolva (jdk meg android sdk). Én úgy látom, hogy a világ ebbe az irányba megy el.
Egyébként a sok brancheléshez ajánlom ezt a modellt, nagyon sokan használják, jól működik.
-
lanszelot
addikt
Kérlek, kérlek! Szépen kérlek titeket, ne ezen lovagoljatok már!
Az alkalmazás 100% elkészítettem. Fogalmam sincs a programozásról, és én csak a megírt tanítót olvastam / Sianis írta nekem/, értelmeztem, és átalakítottam. Nem akarok erről beszélni. Ti lelőttetek azért mert az ODK alkalmazásról kérdeztem, mert off. De az, hogy ti folyamatosan rugdostok, az nem off?Annyi a gondom, hogy nem tudom hová menti a db file-t.
Akárhogy keresem, nem találom.
Valahová menti, mert mentés után a beállítások-alkalmazások-saját alkalmazás -ban megjelenik egy 44kb-os file az adatok-nál. Tehát vhol van. De hol?[ Szerkesztve ]
-
lanszelot
addikt
Root nélkül nem is lehet megcsinálni?
Nem root-olom a telefonom, és nincs pc-m.
Valami megoldásnak csak lennie kell...thon73 : olvass vissza miket kaptam segítség helyett, csak azért mert nem tudok programozni.
A linket amit küldtél nem értem, mert tele van szak szóval, amiből egyet se ismerek.
Az adb-t se tudom mi az. Bocsi.[ Szerkesztve ]
-
lanszelot
addikt
Kicseréltem string-re, így most már jól működik, de
Rootlotam a régi telomat, és feldobtam rá az sqllite editort, így már meg tudom nézni végre az adat file-t.
Csak egy gond van, hogy üres.
Beírom az adatokat, majd rányomok a mentés gombra, és semmi hibát nem jelez, mintha tökéletesen működne, de csak egy üres db file-t ment el, ahol ott vannak a nevek, csak nincs semmilyen bevitt adat.
Nézegettem, de nem látom hol hibáztam -
lanszelot
addikt
Hello!
1: igen android studio-t
2: igen azt alakítottam átNem tudom android studioban futtatni a programot, mert nincs windows-om, és a rendszerem alatt nem működik a virtuális futtató rendszer.
Így csakis telefonon tudom tesztelni.Rootoltam a telót amin futtatom, tehát bármihez hozzá férek, de a "logcat"-ot nem találom, hol keressem?
A Sianis programja jól működik. az enyém is működött, amíg kb 10 adatot kért be /mentettem folyamatosan, hogy vissza nézhessem/, de most már majdnam 40-et kér be. Nézegettem a hibát, de nagyon nem találom. Semmi féle hibát nem jelez /ami nem azt jelenti nincs/ A két mentés között már csak az adatbázist szerkesztettem, tehát szerintem ott lesz valami.
A db fileba csak a nevek vannak, semmilyen bevitt adatot nem rak bele. Elmenti, de adatok nélkül.
Néztem telón, és laptopon is, mind kettő azt mutatja.Az a fura, hogy úgy csinál, mintha teljesen jól működne, nem lép ki, nincs hiba üzenet, látszólagosan elmenti, mert mentés gombra nyomva kiüríti, hogy ismét be lehessen vinni a következő adatokat. Az eredeit is így működik, csak ott a db file-ban ott vannak az adatok.
A program nem olvas vissza adatot. Egyszerűen a bevitt adatot berakja egy db file-ba.
[ Szerkesztve ]
-
lanszelot
addikt
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"><ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/saveButton"><LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
androidrientation="vertical"><EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_name"
android:inputType="textPersonName"
android:maxLength="99"
android:singleLine="true" /><Button
android:id="@+id/saveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/save" />
</LinearLayout></ScrollView>
</RelativeLayout>
-
lanszelot
addikt
Most ezzel a két sorral van baja:
android:id="@+id/saveButton"
és a
android:text="save" />
alsónál a "save" ra ha ráviszem az egeret ezt írja ki:
[I18N] Hardcoded string "save", should use @string resource less... (⌘F1)
Hardcoding text attributes directly in layout files is bad for several reasons: * When creating configuration variations (for example for landscape or portrait)you have to repeat the actual text (and keep it up to date when making changes) * The application cannot be translated to other languages by just adding new translations for existing string resources. In Android Studio and Eclipse there are quickfixes to automatically extract this hardcoded string into a resource lookup. -
lanszelot
addikt
Igen, így már semmi baja. Oda akartam bigyeszteni, csak amikor felajánlotta a dolgokat kiment a fejemből.
Még egy szöveges részt kell majd beillesztenem, de az csak kiírás, azzal nem lesz gondomSzeretném Nagyon, Nagyon Szépen megköszönni mindenkinek a segítséget!
Még biztos lesznek kérdéseim, de az indulás mindig a legnehezebb.
-
lanszelot
addikt
Lehet , hogy azért nem fordítja jól át, mert nem windows-om van. Nem tudom.
Mindent megcsináltam amit írtál, de csak fekete képernyő a vége.Már ajánlották régebben, de nekem az nem volt jó amire kellett.
Mivel a progi már kész, csak tanulás végett folytatom.
Ami a programban volt, abból egyedül a gombot nem tudom megcsinálni, a többi már megy, így gondoltam még egy lépést[ Szerkesztve ]
-
nagyúr
Vagy asset vagy adsz sd-re irasi jogot az appnak (de lehet ez mindket esetben kell) es siman letrehozol egy filet egy konyvtarban majd beleirsz, vegen meg lezarod. Asszem FileWriter a neve vagy micsoda.
szerk: itt egy pelda kod
public void generateNoteOnSD(String sFileName, String sBody){
try
{
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
root.mkdirs();
}
File gpxfile = new File(root, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
e.printStackTrace();
importError = e.getMessage();
iError();
}
}[ Szerkesztve ]
-
rgeorge
addikt
Nem kellett volna dupla zárójelbe tenned a hibajelentést, ez nem finom, hanem durva hiba. Sajnos a java nem igazán támogatja az ilyen erőforrások kezelését, ezért a programozó feladata észben tartani a helyes használatot.
Picard: "What we leave behind is not as important as how we've lived. After all, Number One, we're only mortal." Riker: "Speak for yourself, sir. I plan to live forever."
-
bucsupeti
senior tag
Megoldható root nélkül is. Csinálsz egy BroadcastReceivert amivel figyeled a beérkező SMSeket. Ha a feltételeidnek megfelelő az SMS szövege akkor jelzel valamilyen módon (én valamilyen rezegés szekvenciát küldenék ki)
[ Szerkesztve ]
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
laslie92
senior tag
Ez nekem kell. És csak az az egyetlen APK. Van egy weboldalam ami mobil barát és ahoz kéne ez a webview alkalmazás. De nekem ez nem megy már mint apk-t csinálni belőle pedig sokat olvastam és rengeteg videót is megnéztem.
Galaxy A33 5G , Asus Tuf Gaming FX505DU, Volkswagen Passat B6 3C
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Ozeki Kft.
Város: Debrecen