Új hozzászólás Aktív témák
-
Zedz
addikt
Nehéz elsajátítani a szálkezelést? Van annyira fontos, hogy normálisan utána olvasson az ember és megtanulja? Vagy ezt esetleg csak a nagyobb alkalmazások használják ki?

-
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..
-
Sziasztok! Egyszerű kérdésem lenne. Hogyan tudom működésre bírni a Picasso libraryt az eclipseben? Beraktam a .jar-t a libs mappába, majd "add to build path" de valami nem kóser, nem működik

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

-
Karma
félisten
válasz
WonderCSabo
#2588
üzenetére
Elfogadom, valószínűleg a problémás esetben generikus volt a tartalmazó osztály is, de azt már elhomályosította az idő a fejemben.

-
WonderCSabo
félisten
Te nagyon kevered a szezont a fazonnal. Nem sokat programoztál Javában, meg úgy egyáltalán, jól sejtem? Az alapokat valahogy össze kéne szedni. A szál nem azt jelenti, hogy egy külön osztályba szervezed a kódot, hanem teljesen mást.
Most gondoltam el kezdem magyarázni, hogy hogyan készíts egy új szálat Android módon stb, de rájöttem, hogy igazából a szál fogalmát se ismerheted, különben nem jössz elő ezzel a példával. No offense. Itt van egy leírás az Android UI száláról. Itt pedig úgy szálakról általában. Ha ezeket elolvastad, ne tévesszen meg a dolog, Android-on nem Thread-et szoktunk használni, hanem az első linkben bemutatott AsyncTask-ot.
Default constructor cannot handle exception type MalformedURLException thrown by implicit super constructor. Must define an explicit constructor
Ha egy osztályban nem deklarálsz explicite konstruktort, akkor a fordító létrehoz egy úgynevezett default konstruktort, aminek nincs paramétere és nem dob semmilyen kivételt. De csak akkor hozza létre. ha az ősnek létezik és elérhető olyan konstruktora aminek nincs paramétere és nem dob semmilyen kivételt. Tehát valójában "így nézne ki a class":
public class UrlRead {
public UrlRead(){
super();
}
...
}Ezen kívül Te a konstruktoron kívül rögtön inincializálod a két meződet. Ebben az esetben ez a művelet valójában úgymond a default konstruktorban fog végrehajtódni, valahogy így lesz a lefordított osztályban (pszeudokód):
public class UrlRead {
URL logPage;
BufferedReader in;
public UrlRead(){
logPage = new URL("http://bkaroly.hu/log.php");
in = new BufferedReader(new InputStreamReader(logPage.openStream()));
super();
}
...
}Itt viszont meghívod az URL osztály konstruktorát. Ebben deklarálva van, hogy MalformedURLException-t dobhat:
URL osztály részlete:
public URL(String url) throws MalformedURLException{ ... }
Javában viszont minden ellenőrzött kivételt (és a MalformedURLException az), kötelező lekezelni. Ennek két módja van, vagy try-catch blokkba rakod a műveletet, vagy jelzed, hogy tovább dobható a kivétel a throws kulcsszóval. De a default konstruktor nem dobhat tovább kivételt, ahogy már jeleztem, ezért kapod ezt a fordítási hibát.
Mellesleg a kódodnak nem sok értelme lenne ha fordulna is, hiszen megkapod a BufferedReadert de aztán semmit se kezdesz vele.
-
-
meone
tag
válasz
WonderCSabo
#2581
üzenetére
Ezt hogy érted?: a networking-et mindenképpen nem a UI szálon kell csinálni
Készítsek külön neki egy klasszt és pakoljam be oda?
Mert most azt csináltam.package com.example.webv;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class UrlRead {
URL logPage = new URL("http://bkaroly.hu/log.php");
BufferedReader in = new BufferedReader(
new InputStreamReader(
logPage.openStream()));
}De így meg ez a problémája: Default constructor cannot handle exception type MalformedURLException thrown by implicit super constructor. Must define an explicit constructor
Kellene valami még definiálnom hozzá?
Vagy ezt, hogy értettétek mert akkor nem tudom.
-
Karma
félisten
válasz
WonderCSabo
#2584
üzenetére
Hm. Határozottan emlékszem pedig, hogy TypeToken nélkül nekem ez a felállás nem működött, a Listbe ArrayElement példányok helyett Map<string, object>-ek kerültek - ami futásidőben ClassCastExceptiont okozott.
Az egyetlen különbség, amit így ránézésre látok az, hogy én default constructort hagytam az osztályban, míg nálad van egy elements paramétere. Nem tudom, emiatt tudja kitalálni, vagy sem, de mindenképpen érdekes.

Majd kísérletezek én is kicsit.
-
WonderCSabo
félisten
Valóban működik így, ezt nem tudtam. A TypeToken működését alapvetően ismerem, elkéri a getGenericSuperClass az anonymous TypeToken classtól, aminek aztán a generikus paramétereit le lehet kérni, ez akkor segít, hogy ha mondjuk Map<String, Integeter> van a TypeTokenben. De azt nem tudtam, hogy a fielden is megmarad a generikus infó.
Szerk.: Simán LogHolder.class-t átadva, TypeToken nélkül is működik... Elnéztem valamit?
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
String json = "{\"elements\":[{\"sensor\":\"2\"}]}";
LogHolder fromJson = gson.fromJson(json, LogHolder.class);
System.out.println(fromJson);
}
}public class LogHolder {
public LogHolder(List<ArrayElement> elements) {
this.elements = elements;
}
private List<ArrayElement> elements;
public List<ArrayElement> getElements() {
return elements;
}
}public class ArrayElement {
public ArrayElement(String sensorData) {
this.sensorData = sensorData;
}
@SerializedName("sensor")
private String sensorData;
public String getSensorData() {
return sensorData;
}
} -
Karma
félisten
válasz
WonderCSabo
#2581
üzenetére
2) Túlbonyolítod, a LogHoldernek nem kell generikusnak lennie, viszont a TypeTokenre szükség van. Tegnap este telefonon nem volt hangulatom kisakkozni, úgyhogy köszi hogy beírtad

Szóval végeredményben így festene:
public class LogHolder {
List<ArrayElem> ReturnDataSet;
}
gson.fromJson(in, new TypeToken<LogHolder>(){}).getType()); -
WonderCSabo
félisten
válasz
WonderCSabo
#2581
üzenetére
2) Esetleg még az lehetne, hogy kidobni az egész LogHolder-t, JSON-al lekérni a JSONArray-t és azt beeadni a GSON-nak hogy deszerializálja List<ArrayElem>-mé. De ez nem túl szimpatikus.
-
WonderCSabo
félisten
1) Jaja, a networking-et mindenképpen nem a UI szálon kell csinálni.
2) A másodikat én csak úgy tudnám megoldani, ha így módosítom a LogHolder osztályt:
public class LogHolder<T extends ArrayElem> {
List<T> ReturnDataSet;
}
gson.fromJson(in, new TypeToken<LogHolder<ArrayElem>>(){}).getType());Van esetleg arra vmi szép megoldás, hogy ne kelljen ezesetben a LogHolder-t módosítani?
-
Karma
félisten
válasz
WonderCSabo
#2579
üzenetére
A nagy hajrában két dolgot hadd tegyek hozzá:
1) Hálózati kommunikációt nem UI szálon kéne csinálni, szerintem az URL.openStream el fog hasalni.
2) A LogHolder.class nem lesz elég, mert a generikus lista típusparamétere addigra elvész. TypeTokent kéne beadni a LogHolderre. -
WonderCSabo
félisten
Szia!
Jó úton haladsz. Az ArrayElem class-t majd nevezd át valami értelmesre, mert elég hülye nevet adtam neki.
List<ArrayElem> ReturnDataSet = new ArrayList <ArrayElem>();
Egyrészt ne legyen package private, hiszen így megsérted az enkapszulációt, továbbá itt felesleges az inicializácót, mivel majd a GSON feltölti ezt a mezőt.
A WebView-al pedig eléggé félrelőttél, teljesen felesleges. Arra csak akkor van szükséged, ha meg akarsz jeleníteni egy weboldalt. Próbáld így:
URL logPage = new URL("http://bkaroly.hu/log.php");
BufferedReader in = new BufferedReader(new InputStreamReader(logPage.openStream()));
Gson gson = new Gson();
LogHolder holder = gson.fromJson(in, LogHolder.class);Itt nem az ArrayElem.class-ot kell átadni, hanem a LogHolder.class-t, remélem világos miért.
Javítottam a kódban egy elírást - Karma
[ Módosította: Karma ]
-
meone
tag
válasz
WonderCSabo
#2569
üzenetére
Az általad elmondottak alapján próbáltam össze pakolni a kódot.
Az ArrayElem nevű klassz jelenleg így fest:
package com.example.webv;
import android.R.string;
public class ArrayElem {
private string f_date;
private int f_log_int;
}A LogHolder tartalma pedig a következő:
package com.example.webv;
import java.util.ArrayList;
import java.util.List;
public class LogHolder {
List<ArrayElem> ReturnDataSet = new ArrayList <ArrayElem>();
}A MainActivityt pedig az elmondottak alapján kicsit változtattam.
Jelenleg így fest:package com.example.webv;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class MainActivity extends Activity {
private WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
browser = (WebView) findViewById(R.id.wV1);
}
public void open(View view){
browser.getSettings().setLoadsImagesAutomatically(true);
browser.getSettings().setJavaScriptEnabled(true);
browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
browser.loadUrl("http://bkaroly.hu/log.php");
BufferedReader in = new BufferedReader(new InputStreamReader(browser.getEntity().getContent()));
Gson gson = new Gson();
ArrayElem holder = gson.fromJson(in, ArrayElem.class);
}
}Próbáltam az előző posztod alapján, a userguide alapján, illetve más tutoriálok alapján össze pakolni.
Az ArrayElem.class fájl nem teljes amúgy sem.
Mivel nem értem még teljesen a dolgokat így a kód javításra szorul tudom,
de valami kis meg erősítést kaphatok, hogy jó irányban keresgélek az elmondottak alapján.
Vagy teljesen rossz útra tévedtem megint és hibás teljesen az összepakolt kódom.
Próbáltam valami kis Readert is bele kreálni, hogy egyből a weboldalról kérje be az adatokat. -
Zedz
addikt
válasz
beleszólok
#2575
üzenetére
De hát miért töltene le akárki is ilyen programot. Ohh várj, Instagram.
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
beleszólok
senior tag
Egy kis paranoia: valamelyik fórumon olvastam olyan lehetőségről, hogy egy notebook beépített kamerája mellett hiába van működésjelző LED, lehet úgy programozni a kamerát, hogy egy-egy képkocka elkészítésének idejére kapcsolják be, így sok LED nem képes olyan fényerővel világítani, hogy azt a gép előtt ülő ember észlelje.
A mobilom szinte mióta megvan, azóta csinál valami furcsa dolgot: néha mintha "összeesne" a kép egy villanásnyi időre. Elég ritkán csinálja, feltételezem, hogy az automata fényerő szabályozáshoz lehet köze a dolognak (a 4.3-as droid note2-n elég hülye hibákat hozott, közte azt, hogy a fényerő szabályozása finoman szólva is pocsék lett), de beindult a fantáziám

Lehetséges androidon olyan alkalmazást készíteni, ami (feltételezve, hogy a program valahogy olyan jogot kapott, amivel kezelni tudja a kamerát) menet közben, egyetlen kocka készítésének idejére bekapcsolja a kamerát, majd ki?
Ha igen, akkor ennek marad-e valami nyoma a kijelzőn, akár olyan formában is, hogy egy pillanatra összekavarodik a kijelző, majd visszajön az eredeti kép?
(még1x: nem feltételezem, hogy nálam ilyesmiről van szó, pusztán kíváncsi vagyok, hogy egyáltalán lehetséges-e a kivitelezés? Arról gyorsan letettem, hogy én próbáljak ilyen programot írni, valahogy nem vagyok java rajongó újabban
) -
Karma
félisten
Sajnos nem ennyire egyszerű. Mi úgy szoktuk csinálni, hogy írunk egy TextView leszármazott osztályt, ami konstruktorban beállítja magának a betűtípust, és ezt az osztályt használjuk a gyári TextView helyett a layoutokban.
Fontos, hogy a betűtípus objektumot lehetőleg csak egyetlen egyszer töltsd be a memóriában assetből, ezért célszerű egy statikus osztályt írni erre a feladatra, akitől el lehet kérni a betűtípus(oka)t.
Ha több egyedi betűtípus is kell, akkor írhatsz egy egyedi XML attribútumot, amivel szabályozhatod, hogy melyik typeface kell. Például akkor, ha külön font fájlod van regular, bold, light, stb. változatokhoz, és nem akarsz emiatt négy subclasst külön.
-
Zedz
addikt
Sziasztok,
Új fontkészletet szeretnék használni, és ahogy néztem ehhez a Main Activityben meg kell keresni a textviewt, majd annak beállítani a fontot. Nem lehet ezt valahogy styleban megadni, és akkor csak a stylet megadni a textviewnak? Mert ahogy én most ezt értelmeztem, csak az az ID kapja meg a fontot, amelyik textview ID-ját megadjuk az activityben.
-
thon73
tag
Ha készítek egy RGB_565 kódolású bitmap-et, akkor van lehetőségem a "nyers", 16 bites color információ kinyerésére/beállítására? (mondjuk egy ponton) Vagy hogyan módosul a setPixel/getPixel color értéke (ami elvileg ARGB_8888)? Az R-G-B byte-ok utols 5 (ill. G esetén 6) bitje kerül felhasználásra? Vagy arányosan tömöríti a színeket?
Sehol nem találtam erre útmutatást, és amit kipróbáltam, abban sem értem, hogy mi történik. Hogyan lehet az ARGB_8888 és az RGB_565 értéket egymásba konvertálni? (Tegyük fel, hogy az "elveszett" színek nem számítanak, csak az átkonvertálhatóak)
Előre is hálásan köszönöm!
-
WonderCSabo
félisten
Kb. mindent leírtam, amit meg kell csinálnod... A metódus a GSON API része, amit meg kell hívnod ahhoz, hogy egy JSON stringből Java objektumot készíts. Az első paraméterében a deszerializálandó elemet fogadja, a második paramétere pedig a típus, hogy mivé szeretnéd alakítani a JSON-t. Itt a részletes API doc: http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
Itt pedig részletes user guide: http://sites.google.com/site/gson/gson-user-guide -
meone
tag
válasz
WonderCSabo
#2567
üzenetére
Igen jól értelmezted, hogy az egészet fel akarom dolgoztatni.
A WebView szimplán úgy kerül oda, hogy készítettem egy alkalmazás ami megjelenítette az oldalt és ebből gondoltam volna tovább lépni, de ezek szerint megint fals értékre vetődtem.Az egészet felszeretném dolgozni mert különböző layoutakban minden egyes értékre szükség lesz majd.
Ezek az értékek különböző szenzorokból származnak, és azokat majd különböző layoutokban fogom megjeleníteni.
De mivel a feladat nagy így megpróbáltam valahogy kisebb részletekben megvalósítani.Az általad említett metódus nekem magas sajnos nem értem.

Úgy szeretném megvalósítani, hogy nettről olvassa be, mert a tartalma óránként változik.
Kicsit kirészleteznéd, hogy tudjak belőle egy kódot készíteni, mert így nekem magas sajnos.
-
WonderCSabo
félisten
Feltételezem te itt azt szeretnéd, hogy a letöltött JSON stringet Java objektummá alakítsd, és annak az értékeit valahol megjelenítsd, igaz? Ebben az esetben nem értem a WebView hogy jön ide.
Nem tudom mennyi részét akarod átalakítani GSON-al, de ha az egészet, akkor a SerializedName ide nem lesz elég. Hiszen itt van egy JSON obj, aminek egyetlen mezője a ReturnDataSet, amiben egy array van, amely JSON objektumokból áll. Tehát ehhez én csinálnék egy osztályt am egy ilyen array elemet reprezentál, továbbá még egy osztályt (LogHolder ) aminek egyetlen fieldje van ez a ReturnDataSet és List<ArrayElem> típusú. Aztán beadnám a GSON-nak hogy az egészet deszerializálja:
Gson gson = new Gson();
LogHolder holder = gson.fromJson(log_txt_tartalma, ArrayElem.class);A log.txt letöltehted előtte egy string-be, vagy egy Readert adsz be a fromJson első paraméterének ami beolvassa a netről, ahogy tetszik.
-
meone
tag
Sziasztok!
Megint homályba vesztem.

Készítettem egy kis kódot ami megjeleníti ezt a weboldalt.
[link]
Ez a kis program jól is működik.
Azon oldalon van egy JSON tömb és most azt szeretném feldolgozni és a különböző értékeket kiíratni különböző textwiev-ba.
Találtam is hozzá tutoriálokat, és el is indultam a dolgok megértésében, de megint elakadtam.
Erre találtam ezt a kis tutoriált: [GSON tutorial] Illetve ezt: [GSON tutorial 2]
Ezek alapján készítettem ez ezt a kódrészletet:@SerializedName("f_date")
private Long fDate;
@SerializedName("f_log_in")
private Long fLogIn;
@SerializedName("sens_sum_5_6")
private Long sensSum56;
@SerializedName("sens_aver_5_6")
private Long sensAver56;
@SerializedName("sens_max_5_6")
private Long sensMax56;
@SerializedName("sens_last_7_7")
private Long sensLast77;
@SerializedName("sens_time_8_4")
private Long sensTime84;
@SerializedName("sens_aver_24_506")
private Long sensAver24506;
@SerializedName("sens_min_24_506")
private Long sensMin24506;
@SerializedName("sens_max_24_506")
private Long sensMax24506;
@SerializedName("sens_aver_25_507")
private Long sensAver25507;
@SerializedName("sens_min_25_507")
private Long sensMin25507;
@SerializedName("sens_max_25_507")
private Long sensMax25507;
@SerializedName("sens_aver_26_21")
private Long sensAver2621;
@SerializedName("sens_min_26_21")
private Long sensMin2621;
@SerializedName("sens_last_256_17409")
private Long sensLast25617409;
@SerializedName("sens_aver_257_17665")
private Long sensAver25717665;
@SerializedName("sens_min_257_17665")
private Long sensMin25717665;
@SerializedName("sens_max_257_17665")
private Long sensMax25717665;
@SerializedName("sens_aver_258_17665")
private Long sensAver25817665;
@SerializedName("sens_min_258_17665")
private Long sensMin25817665;
@SerializedName("sens_max_258_17665")
private Long sensMax25817665;
@SerializedName("sens_aver_259_17665")
private Long sensAver25917665;
@SerializedName("sens_min_259_17665")
private Long sensMin25917665;
@SerializedName("sens_max_259_17665")
private Long sensMax25917665;
@SerializedName("sens_aver_260_17665")
private Long sensAver26017665;
@SerializedName("sens_min_260_17665")
private Long sensMin26017665;
@SerializedName("sens_max_260_17665")
private Long sensMax26017665;
@SerializedName("sens_aver_512_21249")
private Long sensAver51221249;
@SerializedName("sens_aver_768_21009")
private Long sensAver76821009;
@SerializedName("sens_aver_769_21009")
private Long sensAver76921009;
@SerializedName("sens_aver_770_21012")
private Long sensAver77021012;
@SerializedName("sens_max_770_21012")
private Long sensMax77021012;
@SerializedName("sens_aver_771_21012")
private Long sensAver77121012;
@SerializedName("sens_max_771_21012")
private Long sensMax77121012;
@SerializedName("sens_aver_772_21013")
private Long sensAver77221013;
@SerializedName("sens_last_1024_19713")
private Long sensLast102419713;
@SerializedName("sens_last_1025_19953")
private Long sensLast102519953;
@SerializedName("sens_last_1026_19954")
private Long sensLast102619954;
@SerializedName("sens_last_1027_19953")
private Long sensLast102719953;
@SerializedName("sens_last_1028_19954")
private Long sensLast102819954;
@SerializedName("sens_last_1029_19957")
private Long sensLast102919957;
@SerializedName("sens_last_1030_19958")
private Long sensLast103019958;
@SerializedName("sens_aver_1031_19969")
private Long sensAver103119969;
@SerializedName("sens_aver_1032_19969")
private Long sensAver103219969;
@SerializedName("sens_aver_1033_19969")
private Long sensAver103319969;
@SerializedName("sens_aver_1034_19969")
private Long sensAver103419969;
@SerializedName("sens_aver_1035_19969")
private Long sensAver103519969;
@SerializedName("sens_aver_1036_20225")
private Long sensAver103620225;
@SerializedName("sens_aver_1037_20225")
private Long sensAver103720225;
@SerializedName("sens_aver_1038_20225")
private Long sensAver103820225;
@SerializedName("sens_aver_1039_20225")
private Long sensAver103920225;
@SerializedName("sens_aver_1040_20225")
private Long sensAver104020225;
@SerializedName("sens_aver_1041_19969")
private Long sensAver104119969;
@SerializedName("sens_aver_1042_19969")
private Long sensAver104219969;
@SerializedName("sens_aver_1043_19969")
private Long sensAver104319969;
@SerializedName("sens_aver_1044_19969")
private Long sensAver104419969;
@SerializedName("sens_aver_1045_19969")
private Long sensAver104519969;
@SerializedName("sens_aver_1046_20225")
private Long sensAver104620225;
@SerializedName("sens_aver_1047_20225")
private Long sensAver104720225;
@SerializedName("sens_aver_1048_20225")
private Long sensAver104820225;
@SerializedName("sens_aver_1049_20225")
private Long sensAver104920225;
@SerializedName("sens_aver_1050_20225")
private Long sensAver105020225;
@SerializedName("sens_aver_1201_1201")
private Long sensAver12011201;Lehet, hogy private helyet publicot kellene használnom, de ezt javítani tudom, illetve a változók típusait is át tudom írni.
Ezt a kis kódot eszkábáltam össze, hogy a weboldalt megtudjam jeleníteni:package com.example.webv;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.webkit.WebView;
import android.widget.EditText;
public class MainActivity extends Activity {
private WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
browser = (WebView) findViewById(R.id.wV1);
}
public void open(View view){
browser.getSettings().setLoadsImagesAutomatically(true);
browser.getSettings().setJavaScriptEnabled(true);
browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
browser.loadUrl("http://bkaroly.hu/log.php");
}
}
Ezt a kódot is értem, hogy hogy működik.De a tutorialok alapján a GSON-t nem tudom alkalmazni mert nem értem mi miért van.
Valami kicsit értek, de nagyon el vagyok tévedve.Esetleg valaki tudna egy kis mini kódot írni a hosszú @SerializedName-es részből, hogy meg értsem miket kell még bele tennem, és hogy jelenítsem meg ezeket az értékeket egy layout fájlon.
A tutoriálok alapján, ha jól gondolom kell egy olyan class-t írnom ami a JSON tömbből a megfelelő címszavakhoz a megfelelő értéket kikeresi és eltárolja egy változóba.
Viszont a többi részt már nem értem kellene még írnom egy másik class-t ami megjeleníti vagy hogy kell ezt csinálni?Köszönöm ismételten a segítséget.
-
köszönöm mindkettőtöknek!

-
Karma
félisten
Soha, de soha nem szabad fotókat a createScaledBitmappel skálázni!
Az Android Training külön fejezetet szentel ennek a kérdésnek, azt mindenképpen ajánlom megértésre, aztán meg használj egy kész libet erre a munkára.
Az előbb linkelt Picasso például teljesen jó.
Én meg az Universal Image Loadert szoktam használni. -
Sziasztok!
Mi a leghatékonyabb módja annak, hogy beolvassak egy mappányi képet az sd kártyáról majd slideshowként megjelenítsem őket? Az a bajom, hogy ha túl nagy képeket rak be a user, akkor kifagy a szoftver néhány képcsere után.
Ezekkel már próbálkoztam:
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bmp, width, height, false);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
resizedBitmap.compress(CompressFormat.JPEG, 10, bos);Logcat outofmemoryt ír

-
Zedz
addikt
A képeket már szétválogattam, és van amit szépen méretnek megfelelően ránt be, de tableten nem az xhdpi-ből húzza be a képet, hanem csak simán a hdpi-ből, ezért elég kicsinek hatnak a képek (első genes nexus 7). Az elnevezés ugyanaz, a megfelelő képek a megfelelő mappákban vannak.

-
Zedz
addikt
Köszönöm, reméltem itt megúszom a különböző méretekre való optimalizálást.

-
Hiderseek
újonc
-
Zedz
addikt
Betűméretet meglehet adni arányosan is? Pl. kis kijelzőn is annyi helyet foglal el mint egy tableten. SP-vel szórakozom most, de tableten elég kicsinek tűnnek a betűk.

-
Zedz
addikt
Sziasztok ismét,
Jelenleg egy listába szeretném kiíratni egy tömb tartalmát, de mindig elszáll valamilyen hibával az appom. Itt van a kód amiből próbálom összetákolni. Egy tutorial alapján csinálnám, nem tudom mennyire jó a kód.
-
Karma
félisten
Ha kicsiben csinálod, akkor a Nexusok elég jó választásnak számítanak, hiszen sokáig megkapják a legújabb OS-t. Ha viszont komolyabban bele akarsz folyni a piacba, előbb-utóbb célszerű lesz kiszélesíteni a palettádat kis/gyenge telefonokkal és csúcstelefonokkal is, mert egyrészt egy app jó, ha minden vason jól fut, másrészt rengeteg gyártófüggő meglepetést rejt az Android.
-
Zedz
addikt
válasz
WonderCSabo
#2544
üzenetére
Köszönöm a tippet. Jelenleg még csak emulátorral fejlesztgetek, nincs droidos telefonom.
Szerk.: Milyen telefon ajánlott fejlesztéshez? El fog jönni az idő amikor már be kell ruháznom egybe. Nexusok ajánlottak ilyen célra?
-
WonderCSabo
félisten
Questoid SQLite Browser -rel meg tudod nézni a db-t az Eclipse DDMS-el perspectivében, ha kitallóztada db fájlt. Viszont ehhez alapvetően root jog szükséges az eszközön, mivel az appok belső db-jei védett helyen tárolódnak ( /data/data/<csomagnév>/databases/<db_név> ).
-
Ablakos
addikt
Hogyan tudok valódi képernyő forgatást emulálni a vd eszközön? ctrl + F11 stb. shortcutra elfordul, de a képernyő tartalom is
Be van pipálva az automat. kép.forgatás a beállításokban. -
meone
tag
válasz
Hiderseek
#2536
üzenetére
Köszönöm végre megértettem teljesen.
Tehát ha valami át akarok cipelni másik Activitybe akkor azt fel kell tolnom
jobb esetben egy public static final String-be.
A másik Aktivityből így visszatudok nyúlni érte.
Most már értem ezt a rész teljesen, és tudom is alkalmazni.
Legalább ez megy.
Köszönöm.

Következő lépésen az lesz, hogy egy JSON tömböt megpróbálok feldolgozni amit egy weboldalról szedek le.
Tudom több lépcsős a probléma, és lesz vele szívásom rendesen. -
Zedz
addikt
Sziasztok,
1 hete kezdtem el androidozni, tehát lehet elég alap lesz a kérdésem, viszont olvasgattam utána és még mindig nem teljesen világos a dolog. Az adattárolással ismerkedem most, az adatokat magában az appban (telefonon?) szeretném tárolni az SQLite segítségével.
Ez a fajta adatbázis pontosan hol tárolódik el? Találtam például egy több tutorialból álló sorozatot, és abban van szó többek közt erről is. Azt nagyjából értem, hogyha írni vagy olvasni szeretném az adatbázist, akkor példányosítom ezt az osztályt, majd meghívom a megfelelő metódust, de az nem világos, hogy akkor ha egyszer létrejön a db, akkor az valahol örökre ott lesz a telefonon, vagy app kreálja le minden indításnál?
-
Hiderseek
újonc
Igen, az úgy nem egészen jó.
Így, ha nem tárolod változóban:
message = getIntent().getStringExtra("enUzenetemAMasodikActivitybol");
extraMessage = getIntent().getStringExtra("azEnExtraUzenetem");Ilyen pedig nincs:
MasodikActivity."enUzenetem"
MasodikActivity."azEnExtraUzenetem"
Mivel te a változóért nyúlsz, nem pedig egy értékért. A változóért, amelynek az értéke kell. Érted
így lehetne, ha a második activityben deklarálod a két változót, amelynek értéke a kulcsod.
2.Activity
public static final String enUzenetem = "enUzenetemAMasodikActivitybol";
public static final String enExtraUzenetem = "enUzenetemAMasodikActivitybol";3.Activity
Így tudod használni a második activityben lévő két változód.
MasodikActivity.enUzenetem
MasodikActivity.azEnExtraUzenetemmessage = getIntent().getStringExtra(MasodikActivity.enUzenetem);
extraMessage = getIntent().getStringExtra(MasodikActivity.enExtraUzenetem); -
meone
tag
válasz
Hiderseek
#2533
üzenetére
Köszönöm most már legalább értem.

Viszont módosítottam a 3. activitim tartalmát az általad elmagyarázott kód alapján.
A rendszer valamiért mégse érti.
Mégse tudok "visszanyúlmi" a kulcsokért a másodikba
Az Eclipse valamiért a MasodikActivity-t aláhúzza pirossal.
A Masodik aktivitmet az általad mutatott példára módosítottam.
Íme a Harmadik aktivity tartalma:public class HarmadikActi extends Activity implements OnClickListener {
private String message;
private String extraMessage;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_harmadik);
message = getIntent().getStringExtra(MasodikActivity."enUzenetemAMasodikActivitybol");
extraMessage = getIntent().getStringExtra(MasodikActivity."azEnExtraUzenetem");
findViewById(R.id.btvissza).setOnClickListener(this);
((TextView) findViewById(R.id.tuser)).setText(message);
((TextView) findViewById(R.id.tpass)).setText(extraMessage);
}
public void onClick(View view) {
if(view.getId() == R.id.btvissza)
finish();
}
}Szerintem megint benéztem valamit ami kellet volna még ebbe a kódba.
Pedig azt hittem már legalább a harmadikat képes leszek egyedül összepakolni.
De nem.
-
Hiderseek
újonc
Az
intent.putStringExtra()
függvénynél két dolgot kér. Egy "kulcsot", amivel később azonosítani tudod. Jelen esetben, amikor meg akarod hívni, valamint magát az adatot amit tovább akarsz küldeni.Vagyis a getStringExtra()-nál ahhoz hogy beazonosítsuk, hogy melyik adatra van jelen esetben szükség, argumentumként megadjuk a "kulcsot", amihez társítottuk az adatot.
A te esetedben ez a kulcs egy string az első activityben. (EXTRA_MESSAGE) Így amikor bekéred vissza kell érte "nyúlni", valahogy így:
getStringExtra(MainActivity.EXTRA_MESSAGE);
a lényeg, hogy megadd a kulcsot, amihez társítottad amikor bekéred.Az EXTRA_MESSAGE az első activityben ebben az esetben lehet akármi:
public static final String EXTRA_MESSAGE = "enKicsiExtraUzenetem";Ha a masodik activityben ezt adod meg, ugyanúgy jó:
getStringExtra("enKicsiExtraUzenetem");public class MasodikActivity extends Activity implements OnClickListener {
private String message;
private String extraMessage;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
message = getIntent().getStringExtra(MainActivity.EXTRA_MESSAGE);
extraMessage = getIntent().getStringExtra(MainActivity.EXTRA_TARGET_USER);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.btTovabb1).setOnClickListener(this);
((TextView) findViewById(R.id.tView1)).setText(message);
((TextView) findViewById(R.id.tView2)).setText(extraMessage);
}
public void onClick(View view) {
if(view.getId() == R.id.button2)
finish();
if(view.getId() == R.id.btTovabb1) {
Intent intent = new Intent(MasodikActivity.this, HarmadikActi.class);
intent.putExtra("enUzenetemAMasodikActivitybol", message);
intent.putExtra("azEnExtraUzenetem", extraMessage);
startActivity(intent);
}
}
}intent.putExtra("enUzenetemAMasodikActivitybol", message);
intent.putExtra("azEnExtraUzenetem", extraMessage);Tehát, megadod a kulcsot, amely egy String és az adatot. Akármilyen kulcsot adhatsz, de ahhoz hogy a következő activityben be tudd kérni, azt kell megadni, amit hozzárendeltél
-
meone
tag
válasz
Hiderseek
#2531
üzenetére
Köszi a segítséget.
Próbáltam reszelgetni a te kódodat, hogy tovább adja a 2 értéket a harmadik aktivitiynek.
Hiányosak az ismereteim sajnos.
Kerestem valami le írást is de nem értem a dolgokat.
A kódnak a felhasználótól bekért értékeit már értem, hogy hogy pakoljuk be változóba.
Ezt a kód részletet is értem.public void onClick(View view) {
if(view.getId() == R.id.button2)
finish();
if(view.getId() == R.id.buttontovabb1)Azt viszont még mindig nem, hogy a már változóban benne lévő adatokat hogy pakolom be úgy az intentbe, hogy az jelen esetben a Harmadik ativitynek is érthető és feldolgozható legyen.
Mert így az üzenetek csak a MasodikActivityig jutnak el a harmadikba már nem érkeznek meg.
Most így fest a MasodikActivity kódja.public class MasodikActivity extends Activity implements OnClickListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
String message = getIntent().getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = getIntent().getStringExtra(MainActivity.EXTRA_TARGET_USER);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.btTovabb1).setOnClickListener(this);
((TextView) findViewById(R.id.tView1)).setText(message);
((TextView) findViewById(R.id.tView2)).setText(message2);
}
public void onClick(View view) {
if(view.getId() == R.id.button2)
finish();
if(view.getId() == R.id.btTovabb1)
//startActivity(new Intent(MasodikActivity.this, HarmadikActi.class));
Intent intent = new Intent(MasodikActivity.this, HarmadikActi.class);
intent.putExtra(EXTRA_MESSAGE, messaget);
intent.putExtra(EXTRA_TARGET_USER, message2t);
startActivity(intent);
}
}Elnézést a sok értetlenkedésért.
-
Hiderseek
újonc
A második activity-d. Ez alapján a harmadikat meg tudod csinálni.
Csak írd bele, hogy mit adjon tovább, és a harmadikban, ugyanúgy mint itt, jelenítsd meg.public class MasodikActivity extends Activity implements OnClickListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
String message = getIntent().getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = getIntent().getStringExtra(MainActivity.EXTRA_TARGET_USER);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.buttontovabb1).setOnClickListener(this);
findViewById(R.id.tView1).setText(message);
findViewById(R.id.tView2).setText(message2);
}
public void onClick(View view) {
if(view.getId() == R.id.button2)
finish();
if(view.getId() == R.id.buttontovabb1)
startActivity(new Intent(MasodikActivity.this, HarmadikActi.class));
}
} -
meone
tag
Köszönöm.
Azt hittem csak a Mainből lehet leágaztatni és oda kell visszatérni de akkor másképp is lehet.
Próbáltam is összepakolni egy újabb kódot erre.A MainActivity tökéletesen át adja a két stringet a Második Activitynek ami meg is jeleníti, most azt szeretném megvalósítani, hogy a Második ugyan úgy meg jelenítse és ha a tovább gombra kattintok akkor a HarmadikActivity is megjelenítse.
Ehhez össze is pakoltam a Layotfájlokat azzal nincsen semmi gond.
A Második Activity így módosult úgy hogy már benne van a tovább lépő kód is.:public class MasodikActivity extends Activity{
TextView myView;
TextView myView2;
Button _buttontovabb1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = intent.getStringExtra(MainActivity.EXTRA_TARGET_USER);
setContentView(R.layout.activity_display_message);
Button Gomb2 = (Button) findViewById(R.id.button2);
myView = (TextView) findViewById(R.id.tView1);
myView2 = (TextView) findViewById(R.id.tView2);
myView.setText(message);
myView2.setText(message2);
_buttontovabb1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intenttovabb = new Intent(MasodikActivity.this, HarmadikActi.class);
startActivity(intenttovabb);
}
});
Gomb2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}Próbáltam össze kombinálni a bezáró gombot és a tovább gomb kódját a két Activityben.
Nem sok sikerrel.
A harmadik Activity-t is be jegyeztem a AndroidManifest-be már.
A harmadikActivity ezt a kódot tartalmazza.public class HarmadikActi extends Activity {
TextView myView;
TextView myView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_harmadik);
Button Bezar = (Button) findViewById(R.id.btvissza);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = intent.getStringExtra(MainActivity.EXTRA_TARGET_USER);
myView = (TextView) findViewById(R.id.tuser);
myView2 = (TextView) findViewById(R.id.tpass);
myView.setText(message);
myView2.setText(message2);
Bezar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}Elnézést hogy ilyen sokat kérdezek, de még az elején vagyok a dolognak utána már kevesebbet fogok, csak az elindulás nehéz most.

-
válasz
Hiderseek
#2527
üzenetére
Ha pénzt szeretnél belőle és nincs tőkéd, akkor célszerű az összes bevételt az elején visszaforgatni marketuingbe. Népes felhasználói tábor nélkül nincs IAP bevétel. Másrészt célszerű, hogy IAP nélkül is játszható legyen, az IAP alapvetően csak a "gyorsítást" szolgálja. Ha van csak IAP-vel megszerezhető tartalom, akkor a felhasználói tömeg gyorsan le tud morzsolódni.
-
Hiderseek
újonc
Üdvözlet, 17 éves vagyok és android, főként játék fejlesztéssel foglalkozom egy ideje. Egy komolyabb projektbe kezdtem, amelynek megvalósítása tökéletes ütemben halad. Van szerencsére grafikusom, szóval a játék színvonalas lesz, remélem újat fog mutatni és használható ötleteket tartalmaz. (2D Platformer)
Mindegy, nem is ez a lényeg. Főként arról szeretnék kérdezni egy magyar fórumon is, hogy van e valakinek komolyabb tapasztalata a google play marketen, esetleg az android játékfejlesztésben.
Arra lennék kíváncsi, hogy mennyire van értelme egy nagyjából csak multiplayer játékot fejleszteni. (Lenne offline rész, de nem sok mindenre lenne jó.) A clash of clans példájából kiindulva nem elvetemült egy nagyjából csak multiplayer játék, de egy real-time nagyjából csak wi-fi-n.. én nem tudom.

A másik az lenne, hogy esélyeket latolgassak. Pénzt nem nagyon tudok áldozni, és marketinges tapasztalat nélkül őszintén nem is szeretnék. Minden tőlem telhetőt meg fogok tenni annak érdekében, hogy minél több emberhez eljusson, de az lenne a kérdés, hogy mégis mennyi esély van pénzes kampány nélkül odáig eljutni, hogy az IAP-ból legyen egy visszaforgatható bevétel.
Tételezzük fel, hogy egy kiemelkedő játékról beszélünk. Most nem azt mondom, hogy a játékom az lesz, mert ez szubjektív és nehéz lenne megállapítani.. csak tételezzük fel.
-
Karma
félisten
1) A megjelenítéssel az a baj, hogy létrehozol TextView-kat kódban, beállítod a szövegüket, de aztán nem rakod őket sehova se. Azt felejtsd el, hogy kódban csinálsz ilyesmit! Erre való a layout XML, ott rakd össze a felületet!
2) Semmi akadálya annak, hogy a harmadik Activityt a második indítsa. Szabadon építheted láncba őket - ha a második elfinisheli magát a harmadik indítása után, akkor a visszagombbal az elsőre jutsz. Ha nincs finish, akkor 3 -> 2 -> 1 lesz a visszairány.
-
meone
tag
Köszönöm az általad módon megpróbáltam el készíteni a kódot és javítani.
Most a feldolgozóoldalon akadtak gondok ahol meg kell jeleníteni a beírt szövegeket.
Arra ezt a kódot eszkábáltam össze megint tutoriálok alapján.public class MasodikActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = intent.getStringExtra(MainActivity.EXTRA_TARGET_USER);
setContentView(R.layout.activity_display_message);
Button Gomb2 = (Button) findViewById(R.id.button2);
TextView textView = new TextView(this);
TextView textView2 = new TextView(this);
textView.setText(message);
textView2.setText(message2);
Gomb2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}A MainActivity végül is így pakoltam össze.
public class MainActivity extends Activity {
public static final String EXTRA_MESSAGE = "com.example.elsoakivi.MainActivity.EXTRA_MESSAGE";
public static final String EXTRA_TARGET_USER = "com.example.elsoakivi.MainActivity.EXTRA_TARGET_USER";
Button _button1;
EditText _messageText;
EditText _messageText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_button1 = (Button) findViewById(R.id.btSend);
_messageText = (EditText) findViewById(R.id.editText1);
_messageText2 = (EditText) findViewById(R.id.editText2);
_button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String message = _messageText.getText().toString();
String message2 = _messageText2.getText().toString();
Intent intent = new Intent(MainActivity.this, MasodikActivity.class);
intent.putExtra(EXTRA_MESSAGE, message);
intent.putExtra(EXTRA_TARGET_USER, message2);
startActivity(intent);
}
});
}
}Felvetődött bennem még kérdés.
A MainActivityn be kért adatokat ki íratom a MásodikActivity-n majd ezeket a ki írt adatokat szeretném ki írni egy harmadik aktivityn ami a 2.ból nyílik.
Ez lehetséges?
Vagy vissza kell térni Mainre és onnan kinyitni a harmadikat? -
Karma
félisten
válasz
laslie92
#2519
üzenetére
Egy értesítéseket fogadó alkalmazáshoz alapvetően három dolgot kell összekapcsolnod: a PHP-s webalkalmazásodat (továbbiakban webapp), a Google Cloud Messaging szolgáltatást (GCM), és az újdonsült Android alkalmazást (mobilapp).
A folyamat nagy vonalakban így néz ki:
1) A Google Developers Console-on regisztrálod magadat, és létrehozol egy azonosítót a webappnak (azaz a küldő félnek).2) A webappot kiegészíted két modullal:
a) az egyik a felhasználókat, azon belül a telefonjaikat gyűjti egy adatbázisba (innen fogod tudni, hogy hova kell küldeni az értesítéseket), és ehhez nyújt valamilyen web service-t a mobilappnak;
b) másrészt a tényleges küldést is a webappban kell megírnod: ha valaki kap egy új üzenetet, akkor meg kell nézni a DB-ben a hozzá tartozó telefont, és arra/azokra lőni egy üzenetet a GCM-en keresztül. Ez egyébként nem bonyolult, csak kell a webapp azonosítója, a címzett, meg a tartalom.3) Megírod a mobilappot.
a) Nem árt, ha a push fogadáson túl van más funkciója is, de ez most mellékes.
b) A mobilappnak regisztrálnia kell a GCM-hez (ez kód szempontjából egyszerűen, egy BroadcastReceiverrel és pár hívással megoldható). A GCM ad a telefonnak ad egy egyedi azonosítót, amit el kell juttatnod a 2a) pontban írt web service-en keresztül a szerverednek, hogy mostantól meg tudja címezni a telefont. A regisztrációnak egyébként illik minden alkalmazásinduláskor lefutnia, és az appnak frissítenie a szerveren a címét, mert változhat. Az se árt, ha közben belecsempészed a felhasználó nevét is.
c) Meg kell írnod, hogy mi történjen, amikor jön egy értesítés, például felraknod egy értesítést az értesítési sávra, vagy ha fut a program, egy dialógust feldobni. Az Android semmit se csinál meg helyetted.És igazából ennyi.
Vannak meglévő szolgáltatások, amivel a folyamat egyes részei felgyorsíthatóak/leegyszerűsíthetőek. Kettő jutott eszembe hirtelen, mert ezeket elég sűrűn használom: a PushBullet és az Azure Notification Hub.
A PushBullet egy önálló alkalmazás és pushküldő szolgáltatás, amivel regisztráció után bármit lehet küldözgetni magadnak az eszközeid, szervereid között. Ha csinálsz a webappodhoz egy modult, ami össze tud kötni egy felhasználót egy PB fiókkal, akkor tudnak értesítéseket fogadni iOS-en, Androidon és asztali böngészőkben is - és akkor nem kell saját appot írnod.
Az Azure Notification Hub meg a 2)-es pontot tudja lényegesen leegyszerűsíteni. Elvégzi az eszközök begyűjtését, karbantartását, és még a GCM-mel is beszél helyetted, cserébe használat alapon fizetni kell érte. De nagy tételben elég jó dolog.
Azt te tudod, hogy a konzerv social networködet mennyire tudod módosítani kézzel, nem tudom megítélni azt se, mennyi elszántságod van hozzá. Azzal nyugodtan számolhatsz viszont, hogy egy ilyen fejlesztés hatszámjegyű tétel, ha valakit keresel hozzá.
Egyébként ez milyen PHP motor? Több helyen láttam, de mindenhol már átírták benne a neveket, nem tudom mi az eredeti.
-
-
Zol77
aktív tag
Üdv ,
Szerintetek meg lehet módosítani a google camera-t, hogy telepítéskor a kép minősége az alap " Normál" helyett "Magas " legyen ? Vagy utólag is ,telepítés után is jó lenne,esetleg valami config fájlban,vagy bárhol.
Elmondom miért érdekes ez nekem:
Van egy Galaxy S3-am , ami prémiumgaranciás még 6 hónapig, ha rootolom,fw-t cserélek, ugrik a garancia.
A google camera csak 4.4 -től van, S3-on meg csak 4.3 van.
Most megyünk kirándulni,és van egy funkció , a photosphere , amit szeretnék használni,csak alapból a képminőség normálon van. Állítani ezt nem tudom,mert ha belépek a settingsbe, egyből fc-zik az app,viszont ha elkezdem a fényképezést,megy szépen,össze is rakja a gömbpanorámát ,az eredmény is jó, csak ugye nem a legjobb felbontásban.
Már az is szenvedés volt,hogy találjak olyan módosított google camera apk-t ,ami elindul root nélkül, és 4.4 alatt,de sikerült,most már csak valahogy fel kellene tornászni az alap "normál" képminőséget "magas" -ra.
Ez az a verzió,ami elindul 4.3-on, root nélkül (xda -ról van) : [link]
Már mérgemben majdnem vettem egy Nexus5 - öt, ezt meg nekiadom az asszonynak
köszi!
Z -
laslie92
senior tag
Sziasztok! A segítségetek szeretném kérni van egy oldalam weboldal amit már optimalizáltam mobil kinézetre. Tök jól néz ki minden happy! De csak böngészőből! Szeretnék egy alkalmazást hozzá ami telepíthető és és még annyi ha írnak nekem üzenetet jelezzen nekem. Esetleg valaki eltudná mondani,hogy nehéz egy ilyet megoldani? meg lehet csinálni egy átlag felhasználónak vagy bízzak meg egy embert aki megcsinálná nekem?
Annyi könnyítésem esetleg akad hogy van egy komplett APK ami ugyan ezen az elven működik csak ugye az nem az én weboldalam hozza be!
Várom azok jelentkezését akik segíteni tudnak nekem.. Nem várom el ingyen Az oldalam mobilos nézete itt található www.laslie.net
-
Karma
félisten
Valószínűleg túlkomplikáltad fejben. Ahány input meződ van, annyiszor hívd meg a putExtrát, más-más kulccsal. Ez a "user" kulcs nem tudom honnan jön, valószínűleg valami üzenettel kapcsolatosat akartál volna írni a kódodban.
Célszerű egyébként az extrák kulcsait public static final Stringekben tárolni, és változóként hivatkozni rájuk, mert akkor kisebb az elgépelés esélye.
Megpatcheltem a példád:
public class MainActivity extends Activity {
public static final String EXTRA_MESSAGE = "com.valami.MainActivity.EXTRA_MESSAGE";
public static final String EXTRA_TARGET_USER = "com.valami.MainActivity.EXTRA_TARGET_USER";
Button _button1;
EditText _messageText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_button1 = (Button) findViewById(R.id.button1);
_messageText = (EditText) findViewById(R.id.editText1);
_button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String message = _messageText.getText().toString();
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(EXTRA_MESSAGE, message);
intent.putExtra(EXTRA_TARGET_USER, ...); // peldaul
startActivity(intent);
}
});
}
}Bátorkodtam a magyar megnevezéseidet és inkonzisztens kis-nagybetűidet egységesíteni. Mindenkivel jót teszel, különösen magaddal, ha csak egy nyelven és csak egy stílusban írsz kódot.
-
meone
tag
Pórbálok összerakni egy olyan kis kódot ami
2 EditText értéket visz át egy másik Activity-re és ott ki íratom m ind a kettőt.
Ehhez látom, hogy a putExtra()-t kell használni.
Össze is pakoltam tutorialok alapján egy kódot íme:public class MainActivity extends Activity {
Button Gomb1;
EditText uzenetmezo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Gomb1 = (Button) findViewById(R.id.button1);
uzenetmezo = (EditText) findViewById(R.id.editText1);
Gomb1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String uzenet = uzenetmezo.getText().toString();
Intent intent = new Intent(MainActivity.this, MasodikActivity.class);
//intent.putExtras(intent, uzenet);
intent.putExtra("user", uzenet);
startActivity(intent);
}
});
}
}Esetlegesen ha több input mező van akkor tömbben kéne át adni az adatokat?
Próbálkoztam a putExtras paranccsal de azt nem tudtam megfelelően alkalmazni, szintaktikai hiányosságaim miatt.
Keresgéltem példakódokat, hogy az alapján át írom és módosítgatom, de még nagyon homály vagyok belőle. Hol találhatok valamiféle mintakódot vagy, hogy keressek erre rá? -
Karma
félisten
Egy kérdés, ami nagyon kikívánkozik: ezt a kódot, különösen a break labeleket, te írtad kézzel? Meg a static változóba lerakott adattagokat? Vagy ez egy visszafejtett projekt, amit elkezdtél kézzel reszelni?
Mert ha bármelyikre is igen a válasz, sőt, még anélkül is, nagyon javaslom hogy kuka az egész adatkezelésre és oldd meg rendesen. Például JSON-re a manuális feldolgozás helyett használd a Gson-t a modell osztályoddal és majd ő kitölti a mezőket.
A 173-as sort egyébként tényleg nem lehet elérni, hiszen előtte ott a return vagy a break minden esetben. A 202-essel ugyanez a helyzet, ott van előtte a return. A sor így felesleges. Egyben indikátora, hogy itt gondok vannak, nem kicsit.
-
meone
tag
Sziasztok!
Programozás közben akadt némi gondom, és ehhez kéne segítség, esetlegesen valami javítás, hogy mit ronthattam el a kódban.
Adott ez a kód: TabView
A 173. sor tartalmazza ezt a kódot: continue Label_0072_Outer;
Erre az android stúdió azt mondja: Unreachable statement
Mivel nem vagyok benne profi így nem tudom, hogy ezt hogyan kell kijavítani.Ennél a kódnál pedig Station a 202. sorban ugyan úgy Unreachable statement van.
A következő programkódrészlet a 2. linkből van ki emelve a félkövérrel kiemelt értékeket pirossal aláhúzza a rendszer és nem tudom, hogy miért.protected void startAnimation(final String message) {
if (this.getResources().getConfiguration().orientation == 1) {
this.setRequestedOrientation([B]1[/B]);
}
else {
this.setRequestedOrientation([B]0[/B]);
}
if (this.dialog == null) {
this.dialog = new ProgressDialog((Context)this);
}
this.dialog.setMessage((CharSequence)message);
this.dialog.show();
}
protected void stopAnimation() {
if (this.dialog == null) {
return;
}
if (this.dialog != null && this.dialog.isShowing()) {
this.dialog.dismiss();
this.dialog = null;
}
this.setRequestedOrientation([B]4[/B]);
}A teljes megértéshez csatoltam az egész projekt java klasszait.:[link]
A segítségeket hálásan köszönöm előre is.

-
Ablakos
addikt
Android stúdióban készített project nem ugyanolyan felépítésű, mint az eclipses? Importálás eclipsbe elég nehézkes vagy én szerencsétlenkedem?
-
Sziasztok! Valaki fel tudná vázolni nekem, hogy mi a menete a google marketra való app feltöltésnek? Illetve hogyan tudok teszt appot kirakni és ahhoz ki férhet hozzá? Köszi!

-
thon73
tag
Van valakinek tapasztalata a View onMeasure() metódusában?
<FrameLayout android:id="@android:id/inputArea"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
</FrameLayout>Ebbe a FrameLayout-ba helyezek egy custom View-t, aminek semmilyen Layout paramétert nem adok meg. Ilyenkor - gondolom a Frame Layout miatt - teljes képernyőszélesség:MeasureSpec.EXACTLY és teljes képernyőmagasság:MeasureSpec.AT_MOST értékekeket kapok az onMeasure paramétereiként.
Hiába írom be a kép létrehozásánál pl. ezt:
boardView = new BoardView( this );
boardView.setLayoutParams( new ViewGroup.LayoutParams( 200, 200 ) );NEM 200x200-as kérést, hanem az előbbi értékeket kapom. (Akkor is, ha ViewGroup helyett FrameLayout-ot adok meg, hiszen az csak leszármazottja.)
Ezzel szemben, ha készítek egy res/layout xml-t, és ugyanezt a custom View-t abból (inflate-tel) készítem el, akkor figyelembe veszi a View-hez beírt layout paramétereket.
Két kérdésem van:
- Mit rontok el a programkódnál megadott paramétereknél, ami miatt nem veszi azokat figyelembe?
- Mikor vehetem biztosra, hogy a megkapott mérési értékek a teljes képernyő méretét fogják tartalmazni - már amennyiben semmilyen layout paramétert nem adok meg? (Az oké, hogy AT_MOST, meg EXACTLY jelzőkkel)Amúgy a kép arányaihoz akarom passzintani a View-t, ami rendben is működik - ha a második kérdésre "mindig" a válasz. A másik részt meg csak simán nem értem - eredetileg ezzel akartam volna biztosítani a második kérdést...
-
Zedz
addikt
Sziasztok,
Elkezdtem Androidozni, de máris egy érthetetlen hibába botlottam. Egy sima EditText-et írtam az xml-be, mire az Eclipsenek ez nem tetszik, ezt mondván:
Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
Exception details are logged in Window > Show View > Error LogNos, én utánanéztem mi nyűgje lehet, és elvileg layout renderelésnél az Android 4.4W-nek nem tetszik a dolog, gondolom a viselhető kütyükön nem lesz input. Azonban nem tudom kivenni azt a renderelés közül, hiába venném ki a pipát, nem történik semmi. Valami javaslat esetleg ennek megoldására?

-
Karma
félisten
Igen, bekerülnek, amikor az R újragenerálódik (Anttal fordítás elején, Eclipse-ben azonnal kellene a fájlváltozáskor, de legrosszabb esetben egy Refresh után a res könyvtáron).
Ezen kívül semmilyen dolgod nincs, csak megfelelően hivatkoznod kell (név alapján) az új fájlokra. Pl. XML-ben <include> tag, és benne @layout/uj_layout_file, ha pl. a layoutod neve az volt, hogy uj_layout_file.xml. Java kódban meg R.layout.uj_layout_file lesz a konstans.
-
meone
tag
Köszönöm a tippet, nagyon jól működik.
Viszont felvetődött bennem egy kérdés miközben bedobáltam az eclipse-be más meglévő XML layout fájlokat.
A generált tartalmú R fájlban ezek a külsőleg bedobált fájlok megjelennek hivatkozásként?
Ha esetlegesen hivatkozni akarok rájuk miket kell még megváltoztatni,
hogy a program "észre vegye őket" és más layout fájlokba is használni tudjam őket? -
Karma
félisten
Mindenképp. Az alapokkal tisztában kell lenni akkor is, ha webes technológiával megy neki a fejlesztésnek az ember; ehhez meg célszerű ismerni legalább egy platform lelkivilágát meg mondjuk az MVC alapelveket.
Egyébként az Ionic Frameworkkel elég jó tapasztalataim vannak.
-
Zedz
addikt
Új hozzászólás Aktív témák
- Világ Ninjái és Kódfejtői, egyesüljetek!
- Steam Deck
- Kuponkunyeráló
- Békéscsaba és környéke adok-veszek-beszélgetek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Luck Dragon: Asszociációs játék. :)
- iRacing.com - a legélethűbb -online- autós szimulátor bajnokság
- Okos Otthon / Smart Home
- Vezetékes FEJhallgatók
- Akvarisztika
- További aktív témák...
- Kindle Voyage REKLÁMMENTES könyvolvasó eladó (fizikai lapozógombok, egy síkban levő kijelző!)
- AKCIÓ! Apple Watch SE 2024 44mm Cellular okosóra garanciával hibátlan működéssel
- HIBÁTLAN iPhone 13 Pro Max 256GB Sierra Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS4224
- GYÖNYÖRŰ iPhone 14 Pro 128GB Deep Purple-1 ÉV GARANCIA - Kártyafüggetlen, MS4237,100% Akksi
- Azonnali készpénzes INTEL CPU NVIDIA VGA számítógép felvásárlás személyesen / postával korrekt áron
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest

ehhez kell maven vagy mi
manifestben nem látom hogy benne lenne mint library, vagy itt ne is keressem?



![;]](http://cdn.rios.hu/dl/s/v1.gif)
)

Be van pipálva az automat. kép.forgatás a beállításokban.




