J2ME - Java Mobile
Akoze to s tym zviraznovanim by sa dalo urobit, to je druhorade, skor by som povedal ze graficka zalezitost, ale problem mam s funkcnou zalezistou.
Dajme tomu ze si na display vypisem vsetky polozky cez drawString zaradom. Tak ako mam urobit aby ked stlacim vybranu polozky nastala akcia, teda dalsi krok a zaroven aby v dalsom kroku bolo jasne ze ktoru polozku som stlacil.
Konkretne:
Vypise sa mi zoznam zastavok zaradom a ja jednu potrebujem zadat a nasledne sa mi ma vypisat cestovny poriadok pre tuto zastavku.
A to ze sa mi to nevojde na display nieje tym ze su to extremne dlhe nazvy, ale tym ze v kazdom telefone sa to zobrazi inak a konkretne v mojom dost na hovno.
Dajme tomu ze si na display vypisem vsetky polozky cez drawString zaradom. Tak ako mam urobit aby ked stlacim vybranu polozky nastala akcia, teda dalsi krok a zaroven aby v dalsom kroku bolo jasne ze ktoru polozku som stlacil.
Konkretne:
Vypise sa mi zoznam zastavok zaradom a ja jednu potrebujem zadat a nasledne sa mi ma vypisat cestovny poriadok pre tuto zastavku.
A to ze sa mi to nevojde na display nieje tym ze su to extremne dlhe nazvy, ale tym ze v kazdom telefone sa to zobrazi inak a konkretne v mojom dost na hovno.
Vidno, že si nezažil DOS a Pascal.
(tam sa občas robili aj nejaké menu [aj ja]).
Funkcia, ktorá by vykreslovala to menu, by mala nejaké premenné. Napr. prvá zobrazená položka, počet zobrazených položiek, aktuálne zvýraznená položka.... Zobrazíš všetky a jednu položku zvýrazníš (podľa tej premennej "aktuálne zvýraznená položka"). Ak sa niekam posunieš, najskôr tu položku "aktuálne zvýraznená položka" "odvýrazníš"
upravíš "aktuálne zvýraznená položka" a zvýrazníš tú čo treba. Ak výber potvrdíš, máš v premennej "aktuálne zvýraznená položka" číslo tej potvrdenej položky.
Funkcia, ktorá by vykreslovala to menu, by mala nejaké premenné. Napr. prvá zobrazená položka, počet zobrazených položiek, aktuálne zvýraznená položka.... Zobrazíš všetky a jednu položku zvýrazníš (podľa tej premennej "aktuálne zvýraznená položka"). Ak sa niekam posunieš, najskôr tu položku "aktuálne zvýraznená položka" "odvýrazníš"
DOS, Pascal. Ja som skor na C alebo este lepsie na PHP ale toto je JAVA a keby len to. To je taky tazkopadny jazyk ten J2ME ze az to boli.
Sa ti to dobre hovory ze zvirazni a sa mi tam ulozi premenne. To viem aj ja povedat. A keby to bolo v PHP tak to mam hotovo hned ale tu? Nemam ani sajnu ako mam vytvorit z objektu drawString dajaky odkaz a nieto este k nemu priradit dajaku premennu
Sa ti to dobre hovory ze zvirazni a sa mi tam ulozi premenne. To viem aj ja povedat. A keby to bolo v PHP tak to mam hotovo hned ale tu? Nemam ani sajnu ako mam vytvorit z objektu drawString dajaky odkaz a nieto este k nemu priradit dajaku premennu
Pozri si toto J2ME_Game_Development_with_MIDP2.pdf (konkrétne kapitolu 19)
HEEEELP
Konecne som poriesil problemy s vypisovanim a podobne no a ze idem skusit kolko bude zaberat cely midlet a ci ho zoberie telefon, no a narazil som na brutalny problem.
Ked som nakopol vsetky potrebne data do skriptu do premennych mi pri kompilacii vykoplo ze vraj prilis dlhy kod a nachce to skompilovat.
Takze neviem ako mam uschovat tolko dat aby sa s nimi dalo jednoducho narabat.
Konecne som poriesil problemy s vypisovanim a podobne no a ze idem skusit kolko bude zaberat cely midlet a ci ho zoberie telefon, no a narazil som na brutalny problem.
Ked som nakopol vsetky potrebne data do skriptu do premennych mi pri kompilacii vykoplo ze vraj prilis dlhy kod a nachce to skompilovat.
Takze neviem ako mam uschovat tolko dat aby sa s nimi dalo jednoducho narabat.
To ani neviem naco je. Proste na zaciatku som si deklaroval dvoj-rozmerne polia a potom som priamo do nich priradzoval texty, ale je toho strasne vela.
Problem s kompilaciou som uz vyriesil a to tak ze cast premennych som priradil priamo v jadre a cast v public void startApp().
No teraz nastal novy problem ze ked to dam emulovat tak to vykopne chybu daco v tom zmysle ze malo pamete a sa bojim ze tym padom mi to nepojde na vecsine telefonov.
Ked to spustim v emulatore tak to vypise toto:
Problem s kompilaciou som uz vyriesil a to tak ze cast premennych som priradil priamo v jadre a cast v public void startApp().
No teraz nastal novy problem ze ked to dam emulovat tak to vykopne chybu daco v tom zmysle ze malo pamete a sa bojim ze tym padom mi to nepojde na vecsine telefonov.
Ked to spustim v emulatore tak to vypise toto:
Kód: Vybrať všetko
Uncaught exception java/lang/OutOfMemoryError: SimpleCustomMenu: Maximum byte code length (32kB) exceededPlease HELP
Neviem prist nato ako mam overit ci bola premenna zadana alebo nie.
Mam pole napriklad STR[] a dajme tomu ze daco priradim do STR[0] a STR[1] ale do STR[2] uz nic nedam. A ako mam overit ci v STR[2] daco je alebo nie, aby som vobec nemusel zadavat STR[2]=""; alebo STR[2]="nieco";
EDIT:
Takze uz vediem monolog?
Ten predchadzajuci problem sa mi vyriesit nepodarilo, ale lepsie by bolo keby mi vedel niekto povedat ci sa da v J2ME narabat s txt subormi. Aspon citat data z nic a nasledne ich spracovat a ked ano tak ako please.
Neviem prist nato ako mam overit ci bola premenna zadana alebo nie.
Mam pole napriklad STR[] a dajme tomu ze daco priradim do STR[0] a STR[1] ale do STR[2] uz nic nedam. A ako mam overit ci v STR[2] daco je alebo nie, aby som vobec nemusel zadavat STR[2]=""; alebo STR[2]="nieco";
EDIT:
Takze uz vediem monolog?
Ten predchadzajuci problem sa mi vyriesit nepodarilo, ale lepsie by bolo keby mi vedel niekto povedat ci sa da v J2ME narabat s txt subormi. Aspon citat data z nic a nasledne ich spracovat a ked ano tak ako please.
[quote="SSPPYY"]Please HELP
Neviem prist nato ako mam overit ci bola premenna zadana alebo nie.
Mam pole napriklad STR[] a dajme tomu ze daco priradim do STR[0] a STR[1] ale do STR[2] uz nic nedam. A ako mam overit ci v STR[2] daco je alebo nie, aby som vobec nemusel zadavat STR[2]=""; alebo STR[2]="nieco";
Neviem prist nato ako mam overit ci bola premenna zadana alebo nie.
Mam pole napriklad STR[] a dajme tomu ze daco priradim do STR[0] a STR[1] ale do STR[2] uz nic nedam. A ako mam overit ci v STR[2] daco je alebo nie, aby som vobec nemusel zadavat STR[2]=""; alebo STR[2]="nieco";
Opäť funkcia getResourceAsStream. SKús si nájsť nejaké príklady na použitie tejto funkcie na Google.
Napr.: http://discussion.forum.nokia.com/forum ... 60657.html
http://forum.java.sun.com/thread.jspa?t ... ID=4200507
Napr.: http://discussion.forum.nokia.com/forum ... 60657.html
http://forum.java.sun.com/thread.jspa?t ... ID=4200507
JJ dik moc. Akurat som nasiel jeden funkcny. No ta funkcia ma dost nevyhodu s ktorou sa asi budem musiet zmierit a to ze cely obsah TXT natiahne do jedneho stringu. Idealnejsie by bolo keby sa to cekovalo po riadkoch do String[] ale co uz...
Teda mozem prerobit celu aplikaciu
Ale moc moc dik za pomoc
Teda mozem prerobit celu aplikaciu
Ale moc moc dik za pomoc
Mohol by si použiť DataInputStream. Teda niečo ako: a potom použiť in.readUTF() (ale v tom súbore budeš musieť mať tie údaje uložené v správnom formáte).
Alebo môžeš reťazce ukladať ako bajt v ktorom bude počet znakov a potom tie znaky. A načítavať pomocou:
Kód: Vybrať všetko
DataInputStream in = this.getClass().getResourceAsStream("file.dat");Alebo môžeš reťazce ukladať ako bajt v ktorom bude počet znakov a potom tie znaky. A načítavať pomocou:
Kód: Vybrať všetko
int len = in.readByte();
byte buf[] = new byte[len];
in.read(buf);
mytext = new String(buf);No jo uz mi to fachci ako som chcel ale mam s tym citanim z TXT este jeden problemik. Nemozem do TXT dat vsetky data, aby som uplne odlahcil midlet a to preto ze pri citani to nerozoznava slovensku diakritiku.
Nevies mi prosim ta poradit ako vyriesit tu diakritiku?
Na nacitanie pouzivam toto:
A este jedna otazocka. Da sa riesit nieco ako TextBox ci TextField ale v CANVAS?
Nevies mi prosim ta poradit ako vyriesit tu diakritiku?
Na nacitanie pouzivam toto:
Kód: Vybrať všetko
InputStream is = getClass().getResourceAsStream(File);
try
{
StringBuffer sb = new StringBuffer();
int chr, i = 0;
while ((chr = is.read()) != -1)
sb.append((char) chr);
String ObsahTXT = sb.toString();
}
catch (Exception e)
{
System.out.println("Unable to create stream");
}Osobne odporúčam používať UTF-8 všade, kde je to možné. A potom môžeš použiť:
TextBox cez Canvas sa urobiť dá len tak, že naprogramuješ všetky potrebné funkcie (vlastne urobíš vlastnú verziu toho prvku). Hľadal som nejaký návod na túto tému na internete, ale nič použiteľné sa mi nepodarilo nájsť.
Kód: Vybrať všetko
String text;
DataInputStream is = this.getClass().getResourceAsStream("file.dat");
text = is.readUTF();JJ ten TextBox viem ako urobit cez sledovanie stlacenia tlacidiel no problem je v tom ze na kazdom telefone moze tlacitko reprezentovat inu klavesu pod CANVASom.
A k tomu TXT, tak cez toto sa mi ulozi do toho stringu cely obsah suboru a riesi to problem s diakritikou? A ako dostanem ten .dat subor?
A k tomu TXT, tak cez toto
Kód: Vybrať všetko
text = is.readUTF();V tom dátovom súbore je uložený utf reťazec vo formáte: počet bajtov reťazca ako 16 bitové číslo (vo formáte big-endian) a samotný reťazec v kódovaní utf-8. Teda readUTF() načíta práve ten jeden reťazec. Môže to byť aj rôzne poprekladané inými dátami. Napr. niečo ako:Na vytváranie tých dátových súborov si môžeš urobiť nejaký program (v Delphi, c, jave...)
Zápis utf-8 reťazca by v jave vyzeral asi takto:
Kód: Vybrať všetko
String linka = readUTF(); // oznacenie spoja
int pocet = readByte(); // pocet zastavok na linke
String mena[] = new String(pocet)
for (i = 0; i < pocet; i++) {
mena[i] = readUTF(); // meno zastavky
}Zápis utf-8 reťazca by v jave vyzeral asi takto:
Kód: Vybrať všetko
import java.io.*;
import java.util.*;
class TestApp {
public static void main(String[] args)
{
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream("data.utf8"));
out.writeUTF("aString");
out.writeUTF("Skúška ľščťžýáíé");
out.close();
} catch (IOException e) {
}
}
}