Goto page Previous 1, 2, 3, 4 Next
Artur M. Piwko
Guest
Wed Feb 09, 2011 9:33 am
In the darkest hour on Wed, 09 Feb 2011 00:02:54 +0100,
J.F <jfox_xnospamx@poczta.onet.pl> screamed:
Quote:
Powiem ci, że nie mam pojęcia
byte y = buf[10];
Ta linijka mi załatwia sprawę :-)
Jeszcze wrócę do sprawy jutro

Nie daje mi to spokoju :-)
Jest tam jakas opcja wydruku w "assemblerze" ?
Moze sie cos ujawni .
Da się zobaczyć jak kod wygląda na poziomie byte kodu.
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:223B ]
[ 09:32:36 user up 12708 days, 21:27, 1 user, load average: 0.43, 0.10, 0.77 ]
I am not a perfectionist! (My parents were).
ohouapss
Guest
Wed Feb 09, 2011 7:06 pm
On 9 Lut, 09:33, "Artur M. Piwko" <milusi.pysiac...@buziaczek.pl>
wrote:
Quote:
Da się zobaczyć jak kod wygląda na poziomie byte kodu.
Skoro ta dyskusja trwa dalej, to zanim się wytoczy takie armaty, można
byłoby poprosić autora wątku o kompilowalny kawałek kodu który ma
sprawiać takie problemy? Z opisu, z pierwszej wiadomości, można
podejrzewać że program rzuca coś w rodzaju segfaulta a nie wyjątek.
Nie wierzę w to jakoś, jeśli nie ma tam żadnego odwołania do JNI.
Lelek@
Guest
Wed Feb 09, 2011 7:59 pm
"ohouapss" <knapikgm@gmail.com> wrote in message
news:19b7d58f-44f6-4c22-9a6e-f1534231e21d@v31g2000vbs.googlegroups.com...
On 9 Lut, 09:33, "Artur M. Piwko" <milusi.pysiac...@buziaczek.pl>
wrote:
Quote:
Da się zobaczyć jak kod wygląda na poziomie byte kodu.
Skoro ta dyskusja trwa dalej, to zanim się wytoczy takie armaty, można
byłoby poprosić autora wątku o kompilowalny kawałek kodu który ma
sprawiać takie problemy? Z opisu, z pierwszej wiadomości, można
public void dupa() {
byte buf[] = new byte[256];
int bfx[] = new int[256];
int i, len;
buf = FromEditText.getBytes("UTF-8");
len = buf.length;
for (i = 0; i < len; i++) {bfx[i] = ((int)buf[i] & 0xFF);}
// tu dalej kod ale niezwiązany
}
Jeżeli w polu EditText nic nie wpiszę, będzie puste to próba odczytania
buf[0] skończy się wywałką.
Pętle for można wywalić do testów nie chodzi o jej warunek < len. Pętlę
dodałem później
Zabezpieczyłem to tak:
if (len != 0) {
for (i = 0; i < len; i++) {bfx[i] = ((int)buf[i] & 0xFF);}
}
Lelek@
Guest
Wed Feb 09, 2011 8:03 pm
to mi wyglada na jakąś cholerną optymalizację garbage collecrion czy coś
takiego w czasie wykonywania, że nie jeżeli buf = zamiana zawartośco pola
wide charów UTF16 na UTF8 na bajty daje tylko null to tablica nie powstaje
Lelek@
Guest
Wed Feb 09, 2011 8:14 pm
ale jak wpiszę choćby jeden znak konwertujący się na 1 bajt w utf8 to mogę
czytać dowolny element tablicy bez wywałki.
Chodzi o to, że jeśli to:
buf = FromEditText.getBytes("UTF-8");
nie będzie miało czego czytać w polu bo nic w nie nie wpiszę
to byte Y = buf[0} czy int Y = (int)buf[0]
zamyka program "przysłowiowy ble screen" i do widzenia
zamyka aplikację
Michoo
Guest
Wed Feb 09, 2011 8:46 pm
W dniu 09.02.2011 19:59, Lelek@ pisze:
Quote:
Jeżeli w polu EditText nic nie wpiszę, będzie puste to próba odczytania
buf[0] skończy się wywałką.
Chyba trochę namieszałeś:
byte buf[] = new byte[256];
Tworzysz nową tablicę typu byte. Powinna być czytelna w odróżnieniu od
tablicy Byte w której trzeba dodatkowo utworzyć każdy element.
Quote:
int bfx[] = new int[256];
int i, len;
buf = FromEditText.getBytes("UTF-8");
Tutaj stary buf zostaje oddany do dyspozycji gc a przypisywany jest
nowy. Strzelam, że jak EditText jest pusty to zwraca null a nie pustego
stringa i stąd problem.
--
Pozdrawiam
Michoo
ohouapss
Guest
Wed Feb 09, 2011 9:19 pm
On 9 Lut, 20:03, "Lelek@" <n...@nndn.pl> wrote:
Quote:
to mi wyglada na jak cholern optymalizacj garbage collecrion czy co
takiego w czasie wykonywania, e nie je eli buf = zamiana zawarto co pola
wide char w UTF16 na UTF8 na bajty daje tylko null to tablica nie powstaje
To zabezpieczenie nie ma sensu, gdy len == 0 pętla się po prostu nie
wykona. A jaki wyjątek rzuca?
Lelek@
Guest
Wed Feb 09, 2011 9:29 pm
"ohouapss" <knapikgm@gmail.com> wrote in message
news:5fa375b4-b868-4c45-82d9-ab166c0c6676@s28g2000prb.googlegroups.com...
On 9 Lut, 20:14, "Lelek@" <n...@nndn.pl> wrote:
Quote:
nie będzie miało czego czytać w polu bo nic w nie nie wpiszę
to byte Y = buf[0} czy int Y = (int)buf[0]
zamyka program "przysłowiowy ble screen" i do widzenia
zamyka aplikację
//A może problem wynika z tego, że jak nic nie wpiszesz to dostajesz
//null, na rzecz którego próbujesz wywołać jakieś metody? Już buf.length
//może być problematyczne. Wtedy potrzebny byłby test na null i tyle.
wywalenie buf.length z kodu zakomentowanie go nic nie daje
Lelek@
Guest
Wed Feb 09, 2011 9:33 pm
"ohouapss" <knapikgm@gmail.com> wrote in message
news:7e95f46b-b448-41f1-873e-676287a3a836@t8g2000vbd.googlegroups.com...
// To zabezpieczenie nie ma sensu, gdy len == 0 pętla się po prostu nie
// wykona. A jaki wyjątek rzuca?
Nie wiem jak to sprawdzić, bo dopiero od tygodnia to robię

Nie wiem
gdzie tam sa debugery, ktore coś pokazują
Podpowiedz mi :-)
Co do petli for(;;

to może jej nie być. Chodzi o to, że jak długość jest 0
len=0 to nie wolno mi czytać buf[] bo aplikacja się zamyka bez powodu
Jestem zdumiony tym zachowaniem.
W ogóle jestem zdumiony, że nie ma UNSIGNED w całej tej javie i wszystko co
sie chce robić trzeba robić na wiekszych, szczególnie boli uINT że trzeba go
obrabiać w LONG i stale maskować & 0xFFFFFFFFL
Lelek@
Guest
Wed Feb 09, 2011 9:35 pm
"Michoo" <michoo_news@vp.pl> wrote in message
news:iiuqum$k3b$1@news.onet.pl...
Quote:
int bfx[] = new int[256];
int i, len;
buf = FromEditText.getBytes("UTF-8");
Tutaj stary buf zostaje oddany do dyspozycji gc a przypisywany jest nowy.
Strzelam, że jak EditText jest pusty to zwraca null a nie pustego stringa
i stąd problem.
Ja to wiem i ty to wiesz ale czemu oddaje pamięć przed końcem funkcji? tfu
metody i to jeszcze "likely"
Lelek@
Guest
Wed Feb 09, 2011 9:43 pm
"Michoo" <michoo_news@vp.pl> wrote in message
news:iiuqum$k3b$1@news.onet.pl...
Quote:
W dniu 09.02.2011 19:59, Lelek@ pisze:
Jeżeli w polu EditText nic nie wpiszę, będzie puste to próba odczytania
buf[0] skończy się wywałką.
Chyba trochę namieszałeś:
byte buf[] = new byte[256];
Ktoś na pl.comp.programming zapodał żeby zadeklarować ten buf[] jako final
hmmm. Czyżby w javie można tym zakazać wtrącać się w tę tablicę ? To i ma w
pewnym stopniu sens. Zaraz sprawdzę
ohouapss
Guest
Wed Feb 09, 2011 9:44 pm
On 9 Lut, 20:14, "Lelek@" <n...@nndn.pl> wrote:
Quote:
nie będzie miało czego czytać w polu bo nic w nie nie wpiszę
to byte Y = buf[0} czy int Y = (int)buf[0]
zamyka program "przysłowiowy ble screen" i do widzenia
zamyka aplikację
A może problem wynika z tego, że jak nic nie wpiszesz to dostajesz
null, na rzecz którego próbujesz wywołać jakieś metody? Już buf..length
może być problematyczne. Wtedy potrzebny byłby test na null i tyle.
J.F.
Guest
Wed Feb 09, 2011 10:17 pm
On Wed, 9 Feb 2011 21:35:20 +0100, Lelek@ wrote:
Quote:
"Michoo" <michoo_news@vp.pl> wrote in message
buf = FromEditText.getBytes("UTF-8");
Tutaj stary buf zostaje oddany do dyspozycji gc a przypisywany jest nowy.
Strzelam, że jak EditText jest pusty to zwraca null a nie pustego stringa
i stąd problem.
Ja to wiem i ty to wiesz ale czemu oddaje pamięć przed końcem funkcji? tfu
metody i to jeszcze "likely"
Przed koncem ? Raczej powinna przed poczatkiem - jak rozumiem to
getBytes alokuje nowy bufor na odpowiedz.
Przy odrobinie optymalizacji moze nawet nie alokuje wtedy gdy wyraznie
piszesz new ..
J.
Lelek@
Guest
Wed Feb 09, 2011 10:44 pm
"J.F." <jfox_xnospamx@poczta.onet.pl> wrote in message
news:bt06l6tprh86lbo6opbgkgll9qggti3cod@4ax.com...
Quote:
Przy odrobinie optymalizacji moze nawet nie alokuje wtedy gdy wyraznie
piszesz new ..
Ale to jest taka składnia javy. Inaczej się nie da zapisać alokacji bufora
... chyba, że go zadeklaruję
byte buf[] = {0,0,0,0,0,0,0,0,0,0...............} Tak 256 razy. Nie wiem co
to zmieni, bo samego byte buf[256] sie nie da w javie.
Nie rozumiem różnicy.
Adam Dybkowski
Guest
Wed Feb 09, 2011 11:15 pm
W dniu 2011-02-09 19:59 Lelek@ napisał(a):
Quote:
Skoro ta dyskusja trwa dalej, to zanim się wytoczy takie armaty, można
byłoby poprosić autora wątku o kompilowalny kawałek kodu który ma
sprawiać takie problemy? Z opisu, z pierwszej wiadomości, można
public void dupa() {
[...]
Jeżeli w polu EditText nic nie wpiszę, będzie puste to próba odczytania
buf[0] skończy się wywałką.
Hmmm, coś chyba ściemniasz. Skopiowałem twój przykładowy kod i odpaliłem
w emulatorze 2.2. Na głównej aktywności mam kontrolkę edycyjną o nazwie
"editText1". Tak wygląda cała metoda (podpiąłem jej wywołanie pod
naciśnięcie dodatkowego przycisku):
public void test() {
EditText editText = (EditText) findViewById(R.id.editText1);
String fromEditText = editText.getText().toString();
byte buf[] = new byte[256];
int bfx[] = new int[256];
int i, len;
try {
buf = fromEditText.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
len = buf.length;
for (i = 0; i < len; i++) {
bfx[i] = ((int)buf[i] & 0xFF);
Log.d("TEST", "BYTE: " + bfx[i]);
}
}
Znajduje się tu wszystko, co przytoczyłeś plus dodatkowy kod na początku
do odczytania ciągu znaków z kontrolki edycyjnej. Początkowe
zaalokowanie bufora buf nie ma znaczenia bo metoda getBytes() i tak
zwraca tablicę bajtów i zmienna buf zostanie nadpisana. Prościej jest
nie deklarować tej zmiennej na początku tylko dopiero gdy jest
potrzebna, np:
byte buf[] = fromEditText.getBytes("UTF-8");
W każdym razie uruchomienie daje spodziewane rezultaty. Gdy kontrolka
jest pusta to nic się nie wywala, metoda getBytes() zwraca pustą tablicę
a nie null, w zmiennej len mamy wartość 0 i nic się nie wypisuje.
Natomiast gdy do kontrolki edycyjnej wpiszę jakiś tekst to także
powyższy kod działa zgodnie z oczekiwaniami. Na debugu (to ten magiczny
LogCat, w Eclipse możesz go pokazać wybierając z menu: Window/Show
view/Other/Android/LogCat albo prościej naciskając Ctrl+3 i wpisując
"logcat") jest to pokazywane:
02-09 22:04:03.585: DEBUG/TEST(336): BYTE: 97
02-09 22:04:03.585: DEBUG/TEST(336): BYTE: 100
02-09 22:04:03.585: DEBUG/TEST(336): BYTE: 97
02-09 22:04:03.585: DEBUG/TEST(336): BYTE: 109
Chyba nie unikniesz pokazania większego kawałka kodu aby ustalić co się
wywala właściwie. Możesz spakować cały projekt i wrzucić gdzieś na sieć?
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Goto page Previous 1, 2, 3, 4 Next