PC_MAGAS Δημοσ. 19 Απριλίου 2021 Δημοσ. 19 Απριλίου 2021 (επεξεργασμένο) Στην εφαρμογή μου https://github.com/pc-magas/sercommH300sVoipCredentialsRecovery που αναπτύσσω για να λαμβάνω τα voip settings του H300s έχω φρακάρει σε ένα stubborn σημείο. (Ps η εφαρμογή έχει πέρα την χρησιμότητα ΚΑΙ εκπαιδευτικο χαρακτήρα στο να έχω τεχνογνωσία περί Java Android APP). Στην κλάση Η300sCredentialsRetriever https://github.com/pc-magas/sercommH300sVoipCredentialsRecovery/blob/master/app/src/main/java/com/example/vodafone_fu_h300s/logic/Η300sCredentialsRetriever.java έχω όλη την λογική λήψεως των VOIP Credentials (plz νιώστε ελέυθερα για codereview as well, ελεημοσύνη μου κάνετε) Ο χρήστης αξιοποιεί το ακόλουθο Activity ώστε να δίνει τα στοιχεία που χρειάζονται για να γίνει Login και να ληφθούν τα στοιχεία: https://github.com/pc-magas/sercommH300sVoipCredentialsRecovery/blob/master/app/src/main/java/com/example/vodafone_fu_h300s/screens/ConnectIntoRouterActivity.java To πρόβλημα είναι ότι η εφαρμογή μου αδυνατεί να κάνει δικτυακές συνδέσεις από το ίδιο Τhread του activity. Έτσι κάνω ένα thread και εκτελώ όλο το logic εκεί. Προς το παρόν δοκίμασα τις κάτωθι προσεγγίσεις: να αξιοποιήσω handler (Current Head στο Master branch) αλλά η retrieveUrlContents https://github.com/pc-magas/sercommH300sVoipCredentialsRecovery/blob/9d868391645ae8f8037dbf0c84a0961b749e8f78/app/src/main/java/com/example/vodafone_fu_h300s/logic/Η300sCredentialsRetriever.java#L118 πετά το Exception android.os.NetworkOnMainThreadException Να αξιοποιήσω την runOnUiThread αλλά όπως και το παρπάνω approach λαμβάνω NetworkOnMainThreadException.. Να αξιοποιήσω αυτήν την προσέγγιση https://stackoverflow.com/q/67150195/4706711 Να αξιοποιήσω απ' ευθείας Thread που αλλά με εμποδίζει μέσω των lambda να αννανεώνω το υπάρχων Activity, λαμβάνω το ίδιο ακριβώς σφάλμα. Κάποια άλλη ιδέα αυτό προβλέπω να με παιδεύει καιρό. Έχετε ιδέα για διαφορετικό approach; Τέλος, ένα codereview εφόσον το θέλετε είναι ευπροσδεκτο. Επεξ/σία 19 Απριλίου 2021 από PC_MAGAS
Steftson Δημοσ. 21 Απριλίου 2021 Δημοσ. 21 Απριλίου 2021 Με μια γρηγορη ματια προσπαθεις να βαλεις networking μεσα στο main thread κατι το οποιο ειναι αδυνατο γενικα γιαυτο και σκαει το exception. Χρησιμοποιησε AsyncTask για το networking σου και θα κανεις τις ανανεωσεις που θελεις στην onPostExecute. Δλδ η retrieveUrlContents θα κανει execute ενα AsyncTask το οποιο θα ειναι πχ το Η300sCredentialsRetriever το οποιο στην onPostExecute θα σ κανει update με βαση το response π θα ερθει. Μια χαρα τα εχεις χωρισμενα οποτε νομιζω ειναι σχετικα απλή η αλλαγή.
PC_MAGAS Δημοσ. 21 Απριλίου 2021 Μέλος Δημοσ. 21 Απριλίου 2021 Το AsyncTask όμως ξέρω σαν API είναι deprecated. Πάλι επειδή σκοπεύω στο άμεσο μέλλον να το σπάσω σε APP και Library για να κάνω και ένα CLI εργαλείο ότι Async λέω να γίνετε στο Activity. Τελικά, δοκίμασα ένα διαφορετικό Approach: https://github.com/pc-magas/sercommH300sVoipCredentialsRecovery/blob/39de2ca58252ee48f68017208f364caf0ffe6c6c/app/src/main/java/com/example/vodafone_fu_h300s/screens/ConnectIntoRouterActivity.java#L67-L75 Με την χρήση ενός handler και έπαιξε.
Dinos_12345 Δημοσ. 21 Απριλίου 2021 Δημοσ. 21 Απριλίου 2021 Σε java αν θες blocking network requests θα το κάνεις με thread pool και completable future. Γενικά απαγορεύεται να κάνεις network calls στο main thread και υπάρχουν βιβλιοθήκες όπως το retrofit για να σου κάνουν την ζωή πιο εύκολη με τέτοια θέματα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα