Wpis z mikrobloga

#programowanie #androiddev

No dobrze mam duży problem i nie wiem nawet do kogo się zwrócić o pomoc tak więc pisze tutaj. Może ktoś popatrzy łaskawym okiem i uda się znaleźć błąd.

Pisze chat na urządzenia mobilne. Gdzie klient napisany jest w androidowej javie a serwer w zwykłej. Aplikacja łączy się z serwerem ale nie przesyła wszystkiego.
Tak to wygląda od trony aplikacji Rysunek 1
Natomiast od strony serwera Rysunek 2

Jak gołym okiem widać że wiadomości wysłane z telefonu nie pojawiają sie nigdzie na serwerze. Jak i te które są wysłane od KlientówPC (Test2, Test3 to są chaty odpalane z kompa a nie telefonu)

Do części sieciowej w androidzie korzystam z AsyncTask, nie dostaje żadnych błędów po prostu jakby coś z połączeniem było nie tak - ale jednak trochę działa.

Kod - mainActivity
Kod - klasa Client
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@fegwegw: Własnie nie za bardzo ogarniam debbuger w android studio. Dotychczas korzystałam z user friendly VS. Wchodzi mi to to w funkcje wewnętrzne - zupełnie nie potrzebnie. A ja klikam żeby tylko chodziło mi po moich linijkach.

Zrobiłam sobie staromodny debbuger - "Wpisz wszystko na konsole" powypisywałam sobie różne rzeczy kolejno. Tak wiem że to głupie ale dowiedziałam się że program w ogóle nie wchodzi do podklasy Sender (w klasie Klient)

Mam
  • Odpowiedz
@Pitzonik: wyczytałam że zawsze trzeba zamykać sockety więc po prostu jest to w finally żeby zawsze zamkneło socket. A jeśli run zostanie wywołane kolejny raz to na nowo utworzy socket.

testuje na maszynie wirtualnej.
  • Odpowiedz
@Rachel_: Retrofit służy do obsługi komunikacji z API typu REST, do socketów Ci się nie przyda.

odnośnie tego braku wywołania Sender = new Sender() ... to wywołanie tej metody jest null-checkowane w MainActivity (linia 29) - sugeruje to, że jednak mClient = null.

generalnie używasz AsyncTask wbrew założeniom (ma być wykorzystywany do krótkotrwałych operacji w tle). konstrukcja z nie-statyczną wewnętrzną klasą aż prosi się o kłopoty z wyciekami pamięci.

nie
  • Odpowiedz
@Rachel_ w metodzie sendMessage w klasie Client, referencja "sender" do obiektu Client.Sender (linia 17) nadaje się do odśmiecenia tuż po tym jak kontrola opuszcza tę metodę. Najpewniej dlatego nic ci się nie wykonuje. Olej te AsyncTask-i i przepisz to przyzwoicie na Service ;)
  • Odpowiedz
@another_throwaway23: Hej. Próbowałam zrobić serwis do tego chatu. Przerobiłam prosty tutorial i dodałam do niego prostą jedną funkcje która miała za zadanie po prostu połaczyć się i wysłać wiadomość do serwera. Ale z tego co widzę to mam złe podejście - tylko nie wiem czemu.

Mógłbyś mi doradzić jak to zrobić? Jak powinna wyglądać funkcja connect korzystając z takiego serwisu.

Service
MainActivity
  • Odpowiedz
@another_throwaway23: To trochę konfundujące. Chyba nie dokonca rozumiem jak powina działać wielowątkowość na androidzie. Może napisze jak to rozumiem - wydaje mi się po prostu że problem leży w zrozumieniu co czym się zajmuje.

Wątki - jak to wszędzie jest wykonywanie 2 lub więcej zadań jednocześnie. Na Stack Overflow nie polecają wątków do androida więc myślałąm że to przez to że są prymitywne.
AsyncTask - dodatkowy wątek w programie który
  • Odpowiedz