J2ME - obrobka danych tekstowych

0

Witam, mam pewien problem dotyczacy danych uzyskiwanych z modułu GPS. W sposób ciagły z czytuje linie z nadajnika GPS. Jedna paczka danych zawiera 5 lini charakteryzujących się nagłowkami, moim zadaniem jest wychwycania wybranych lini. Metoda SplitMessages odpowiedzilana jest za znalezienie wśród tokenów charakterystycznego nagłowka. Jednak działa to tylko dla pierwszej iteracji w każdej następnej zachodzi coś dziwnego tak jakby "if" nie był w stanie znaleźć po raz kolejny tego samego nagłówka. Ma ktoś jakiś pomysł?

       while(Connected) {
            String str = RecieveMessages();
            //form.append(str);
            String s = SplitMessages(str);
            if(s != null)
                form.append(s);
            try {
            }
        }
    }

    public String SplitMessages(String message) {
        String str = null;
        st = new StringTokenizer(message, ",");
        while(st.hasMoreTokens()) {
            Object ele = st.nextElement();
            String s = (String)ele;
            if(s.equals("$GPGGA")) {
                String time = st.nextToken();
                connection.setTime(time);
                str = "godzina jest: " + time;
            }

            form.append(s + "\n");
        }
        return str;
    }

    public String RecieveMessages() {
        char[] arrayChar = null;
        try {
            arrayChar = new char[1024];
            int chars, i = 0;
            // zczytywanie linia po lini
            while ((chars = inStream.read()) != 13) {
                arrayChar[i] = (char) chars;
                i++;
            }
        } catch (IOException e) {
            System.err.println(e);
        }
        return new String(arrayChar);
    } 
0

Być może zamiast equals użyj startsWith, albo debuguj kod, albo pokaż tą "paczkę" co otrzymujesz od GPS.

0

Dane są wysyłane cały czas i chce wyłuskac spośród nich tylko linie $GPGGA, warunek if działa tylko i wyłacznie dla pierwszej iteracji w każdych kolejnych jest pomijany

$GPGGA,064951.000,2307.1256,N,12016.4438,E,1,8,0.95,39.9,M,17.8,M,,65
$GPGSA,A,3,29,21,26,15,18,09,06,10,,,,,2.32,0.95,2.11
00
$GPGSV,3,1,09,29,36,029,42,21,46,314,43,26,44,020,43,15,21,321,397D
$GPRMC,064951.000,A,2307.1256,N,12016.4438,E,0.03,165.48,260406, 3.05,W,A
55
$GPVTG,165.48,T,,M,0.03,N,0.06,K,A*37

0
mi14chal napisał(a)

Być może zamiast equals użyj startsWith, albo debuguj kod, albo pokaż tą "paczkę" co otrzymujesz od GPS.

StartsWith takze nie działa, juz probowalem nextToken rowniez nic nie daje

0

Zauważyłem ciekawą zależność w momencie gdy szukam znaku typu "N" lub "M", które się pojawiają działa bez problemu czy znak '$' ma jakis wpływ na poparwność warunku if? bo już zielony jestem dlaczego to nie działa

0

Popatrzmy na przykładowy kod: http://ideone.com/VqYwb i za każdym razem jest wydobywana wartość. Gdzieś indziej masz pewnie błąd.

0

nie bardzo rozumie gdzie, udało mi sie uzyskać ta linie przy użyciu substring(1,7) GPGGSA ale nie bardzo rozumie dlaczego poprzednie wersje mi nie dzialaja:(

1 użytkowników online, w tym zalogowanych: 0, gości: 1