Wpis z mikrobloga

@MisiekD: po Response response zrób sobie sprawdzenie status code jaki przyszedł z posta
coś w stylu:
if (responses.code() == 200)

to bedziesz wiedział co się dzieje
@push3k-pro: @abuson: o tym myślałem, ale jestem początkujący i nie umiem jeszcze tak dobrze bawić się w logi :)

Natomiast skorzystałem z kolegi error.getMessage() i otrzymałem:

D/NetworkSecurityConfig: No Network Security Config specified, using platform default
Co to może oznaczać, jak załatwić sprawę?
ten adres to co to jest? jakiś lokalny serwer?


@Karatte: Tak, node.js. Samo wejście w link powinno dać mi log w konsoli, natomiast on nawet pod ten adres nie wchodzi. W Chrome zadziała, w apce nic.
@MisiekD: Debugowanie na Toastach to głupi pomysł, Zrób Log.e(), mozesz tam podać Throwable i ładnie wypisze exception. Ten request robisz na osobnym wątku? Na głównym nie można. Masz odpowiedni permission w manifeście?
@gentooman: mam jeden permission do INTERNET w Manifeście jak na razie. Natomiast request jest na razie na jednym wątku. Właśnie coś czuję, że będę musiał to dać na inny, natomiast chciałbym najpierw, żebym otrzymał jakąś odpowiedź z body. Wtedy zacznę robić dalej. Jak na razie utknąłem niestety tylko na działaniu na linkach :/

Z Log.e() już spróbuję.
Mam użyć Log.e(error)? Nie korzystałem nigdy z tego jeszcze :|
@gentooman: Dałem Log.e.
Wynik dość długi, ale osobiście niewiele rozumiem jeszcze z tego. Chyba mi trochę zajmie wczytanie się w logi Javy ;)

2020-04-13 02:35:08.886 12539-12539/com.example.myapplication07042020 E/TAG: Error:
java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:492)
at java.net.Socket.getImpl(Socket.java:552)
at java.net.Socket.setSoTimeout(Socket.java:1180)
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:281)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:195)
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:249)
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:108)
at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:76)
at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:245)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:82)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:197)
Błąd przy złym wątku jest inny. Testujesz na emulatorze? Na stacku piszą ze pomogło dodanie permission i usunięcie i reinstalacja apki.


@gentooman: Tak, na emulatorze. Już sprawdzę, uno sec.
@gentooman: sprawdziłem, dodałem dodatkowy PERMISSION, usunąłem apki.
Teraz po chwili logowania od razu wywala i jest crash.

`2020-04-13 02:44:55.044 13412-13412/com.example.myapplication07042020 D/NetworkSecurityConfig: Using Network Security Config from resource networksecurityconfig debugBuild: true
2020-04-13 02:44:55.104 13412-13412/com.example.myapplication07042020 D/AndroidRuntime: Shutting down VM
2020-04-13 02:44:55.108 13412-13412/com.example.myapplication07042020 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication07042020, PID: 13412
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
@MisiekD: android.os.NetworkOnMainThreadException. Teraz to na pewno. Zrób to co ci podlinkowałem wcześniej z enqueue(...). Nie wymaga to dużych zmian, ale pamiętaj ze aktualizacja UI znowu musi być na głównym wątku, jest to też opisane w tym poradniku.
@gentooman: Kurcze, rzeczywiście jest napisane jak byk przez co... A aktualizacja UI? Ja to działam tak, że tego geta używam jako jakby funkcję, która zwraca content strony. Nie wiem jak to inaczej opisać. Ogólnie niezbyt dobrze orientuję się jeszcze w Javie. Z tymi wątkami to raczej będzie zabawa, bo robiłem to dosłownie raz.
@MisiekD: No to możesz mieć problem z tym jak zaprojektowałeś sobie architekturę aplikacji. Aktualizacja UI to np wrzucenie zawartości która pobrałeś do pola tekstowego. Twój problem jest taki ze nie bardzo masz jak zwrócić ten wynik na główny wątek, wiec aktualizacja UI musi być w callbacku który przekazałeś do enqueue. Inne rozwiązanie to przekazanie lambdy do funkcji sendLink w której aktualizujesz UI. Coś w stylu tego jak działa np setOnClickListener na
@MisiekD: Chyba nie zrozumiałeś. Response istnieje w callbacku. Po zastosowaniu enqueue funkcja sendLink nie ma czego zwrócić i najlepszym rozwiązaniem bez wielkich przeróbek będzie przyjęcie callbacku do aktualizacji UI. Oczywiście to nie rozwiązuje wszystkich problemów, bo np obrócenie ekranu w trakcie wykonywania requestu może wywalić apke.
via Wykop Mobilny (Android)
  • 0
@gentooman: dziś w dzień postaram się tym pobawić :) Spróbuję zrobić na wątkach. Dam znać jak idzie, choć możliwe, że znów się odezwę z jakimś problemem ;)
I tak, nie zrozumiałem do końca. Java to dla mnie nowość, no, ale muszę jakoś podziałać na niej też.
PS. Jak możesz to odblokuj priv. Pisałem do Cb, ale nie wiem czy doszło.
Tak czy siak, dziękuję Wszystkim za pomoc i życzę dobrej nocy
@MisiekD: jeśli dobrze zrozumiałem, masz serwer lokalny, który działa na localhost. Chcesz się do niego odwołać na emulatorze? To tak nie zadziała. Można tak zrobić, ale trzeba pokombinować. Jeśli w emulatorze odwołujesz się do localhost to on oczekuje, że na tym urzadzeniu działa serwer, który nadsł#!$%@? na localhost.
via Wykop Mobilny (Android)
  • 0
@MisiekD: dwukrotnie konsumujesz strumień danych z response raz przy wyświetlaniu toasta A drugi raz przy powrocie z metody. Za drugim razem strumień jest pusty i dostajesz IO exception. Zapisz sobie zawartość strumienia do jakiejś zmiennej i reuzywaj.

Z ciekawości - studiowałeś informatykę czy jesteś samoukiem? Pytanie bez złośliwości, czysta ciekawość.
via Wykop Mobilny (Android)
  • 0
@MisiekD: jeśli dobrze zrozumiałem, masz serwer lokalny, który działa na localhost. Chcesz się do niego odwołać na emulatorze? To tak nie zadziała. Można tak zrobić, ale trzeba pokombinować. Jeśli w emulatorze odwołujesz się do localhost to on oczekuje, że na tym urzadzeniu działa serwer, który nadsł#!$%@? na localhost.

@mmaciejow: dokładnie, mogę się też odwołać po adresie IP (tak właśnie robię) i tak jak napisałem wcześniej - na Chrome na emulatorze
via Wykop Mobilny (Android)
  • 0
@MisiekD: dwukrotnie konsumujesz strumień danych z response raz przy wyświetlaniu toasta A drugi raz przy powrocie z metody. Za drugim razem strumień jest pusty i dostajesz IO exception. Zapisz sobie zawartość strumienia do jakiejś zmiennej i reuzywaj.


Z ciekawości - studiowałeś informatykę czy jesteś samoukiem? Pytanie bez złośliwości, czysta ciekawość.

@Mithrindil: tak, wiem, ale Toast jest tylko jako test. Ale zacznę używać najwidoczniej tylko polecenia Log.
Natomiast do tego Toast