Android - Page 2

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Re: Android
On Fri, 11 Feb 2011 19:48:05 +0100,  Lelek@ wrote:
Quoted text here. Click to load it

wskaznik, wskaznik, ale na Obiekt, i to juz moze bardzo roznie
dzialac.

J.


Re: Android
On Mon, 07 Feb 2011 09:45:09 +0100,  Shaman wrote:
Quoted text here. Click to load it

Rzutowanie to rzutowanie, wymienic odpowiedzialnych autorow ktorzy
zastosowali do C :)

P.S. Casting ? Odlewanie. I nie mamy na mysli egzaminu dla aktorek :-)

J.


Re: Android
W dniu 2011-02-07 07:11, Lelek@ pisze:

Quoted text here. Click to load it

int X = (int)buf;
lub
int X = (int)&(buf[0]);

Quoted text here. Click to load it

byte Y = (byte)(buf+2);

tak lepiej?

--
pozdrawiam
       Mikołaj

Re: Android
W dniu 2011-02-07 07:11 Lelek@ napisał(a):

Quoted text here. Click to load it
[...]

Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.

BTW: NTG?

--
Adam Dybkowski
               http://dybkowski.net /

We've slightly trimmed the long signature. Click to see the full one.
Re: Android

Quoted text here. Click to load it


Nie wiem co to jest LogCat :-) Od kilku dni się tym zajmuję :-).
Wiem jedno, że ten buf[256] zapełniam wpisując w niego null terminated
string. I jeżeli czytam poza długością wpisanego stringa to zawsze jest ten
efekt ale dziwi mnie czemu mimo zadeklarowania rozmiaru on tak to traktuje.
To zachowanie ma miejsce tylko dla byte. dla int tablica istnieje.
Obszedłem to ale weź sobie zapodaj w kodzie takie dwie linijki, jedna
deklaracja i niżej Y = buf[10] i skompiluj i uruchom. Wywałka murowana
gdziekolwiek nie postawisz byle się wykonało.


Re: Android
W dniu 2011-02-08 00:16 Lelek@ napisał(a):

Quoted text here. Click to load it

Wygląda na to, że byłem pierwszy, który to sprawdził doświadczalnie.
Takie linijki dodałem na końcu onCreate w głównej mojej klasie
dziedziczącej po Activity:

byte buf[] = new byte[256];
byte y = buf[10];
Log.d("TEST", "WARTOSC Y=" + String.valueOf(y));

Sprawdzałem w emulatorach 1.5 oraz 2.2. W obu przypadkach zachowanie
jest identyczne i przewidywalne. Świeżo alokowany blok 256 bajtów jest
standardowo wypełniony zerami i to widzę w LogCat:

02-08 21:39:22.351: DEBUG/TEST(848): WARTOSC Y=0

Program się nie wywalił i działa normalnie. Może masz wywałkę z innego
powodu...

--
Adam Dybkowski
               http://dybkowski.net /

We've slightly trimmed the long signature. Click to see the full one.
Re: Android

Quoted text here. Click to load it

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 :-)


Re: Android
Quoted text here. Click to load it

Opakuj tę linijkę w blok try/catch i zobacz czy coś się złapie. Jak
wejdziesz w obsługę wyjątku, to znaczy że ta linijka bruździ. Jeśli
dalej się będzie wywalać, to znaczy że co problem jest gdzieś indziej.

pzdr.
j.


Re: Android
On Tue, 8 Feb 2011 23:48:49 +0100,  Lelek@ wrote:
Quoted text here. Click to load it

Jest tam jakas opcja wydruku w "assemblerze" ?
Moze sie cos ujawni .

J.



Re: Android
W dniu 2011-02-09 00:02 J.F. napisał(a):

Quoted text here. Click to load it

W Javie? Zawsze możesz zrobić disassemblację pliku classes.dex z
wewnątrz instalki apk. Ale pewnie dużo się nie wyjaśni dopóki Lelek nie
napisze, co mu LogCat wywala przy tym błędzie.

--
Adam Dybkowski
               http://dybkowski.net /

We've slightly trimmed the long signature. Click to see the full one.
Re: Android
In the darkest hour on Wed, 09 Feb 2011 00:02:54 +0100,
Quoted text here. Click to load it

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 ]

We've slightly trimmed the long signature. Click to see the full one.
Re: Android
Quoted text here. Click to load it

Skoro ta dyskusja trwa dalej, to zanim siEA% wytoczy takie armaty, moBF%na
byB3%oby poprosiE6% autora wB1%tku o kompilowalny kawaB3%ek kodu ktF3%ry ma
sprawiaE6% takie problemy? Z opisu, z pierwszej wiadomoB6%ci, moBF%na
podejrzewaE6% BF%e program rzuca coB6% w rodzaju segfaulta a nie wyjB1%tek.
Nie wierzEA% w to jakoB6%, jeB6%li nie ma tam BF%adnego odwoB3%ania do JNI.

Re: Android

Quoted text here. Click to load it


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


Re: Android
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


Re: Android

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ę



Re: Android
Quoted text here. Click to load it

A moBF%e problem wynika z tego, BF%e jak nic nie wpiszesz to dostajesz
null, na rzecz ktF3%rego prF3%bujesz wywoB3%aE6% jakieB6% metody? JuBF% buf=
.length
moBF%e byE6% problematyczne. Wtedy potrzebny byB3%by test na null i tyle.

Re: Android

Quoted text here. Click to load it

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


Re: Android
Quoted text here. Click to load it

To zabezpieczenie nie ma sensu, gdy len 3D%3D 0 pEA%tla siEA% po prostu ni=
e
wykona. A jaki wyjB1%tek rzuca?

Re: Android


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


Re: Android
W dniu 09.02.2011 19:59, Lelek@ pisze:
Quoted text here. Click to load it
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.

 > 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

Site Timeline