J2ME - Java Mobile

Programovacie jazyky, rady, poradňa...
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

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.
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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 :cry:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pozri si toto J2ME_Game_Development_with_MIDP2.pdf (konkrétne kapitolu 19)
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

EDIT:
Akoze nakoniec sa mi podarilo skonbinovat MIDlet a Canvas do jedneho a ten dokument mi dost pomohol takze mockrat diki :smt023
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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. :cry:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Používaš funkciu getResourceAsStream()?
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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:

Kód: Vybrať všetko

Uncaught exception java/lang/OutOfMemoryError: SimpleCustomMenu: Maximum byte code length (32kB) exceeded
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa 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";

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.
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

[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";
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

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
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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 :wink:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Mohol by si použiť DataInputStream. Teda niečo ako:

Kód: Vybrať všetko

DataInputStream in = this.getClass().getResourceAsStream("file.dat");
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

int len = in.readByte();
byte buf[] = new byte[len];
in.read(buf);
mytext = new String(buf);
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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:

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");
}
A este jedna otazocka. Da sa riesit nieco ako TextBox ci TextField ale v CANVAS?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Osobne odporúčam používať UTF-8 všade, kde je to možné. A potom môžeš použiť:

Kód: Vybrať všetko

String text;
DataInputStream is = this.getClass().getResourceAsStream("file.dat");
text = is.readUTF();
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ť.
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

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

Kód: Vybrať všetko

text = is.readUTF();
sa mi ulozi do toho stringu cely obsah suboru a riesi to problem s diakritikou? A ako dostanem ten .dat subor?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

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:

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

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) {
                }
        }
}
SSPPYY
Medium Star
Medium Star
Príspevky: 370
Registrovaný: 28 máj 2006, 9:46

Príspevok od používateľa SSPPYY »

OK ja to potom vyskusam. Len este jedna otazka. Ten retazec ktory sa nacitava cez readUTF() moze mat kolko znakov?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

SSPPYY napísal:OK ja to potom vyskusam. Len este jedna otazka. Ten retazec ktory sa nacitava cez readUTF() moze mat kolko znakov?
Dĺžka je uložená ako 16 bitové číslo, takže typujem že je to buď 32767 alebo 65535 bajtov (znakov to môže byť 10000-65535, kedže jeden znak v utf-8 môže mať 1-3 bajty).
Napísať odpoveď