1 Востаннє редагувалося SaFed (18.01.2019 20:54:56)

Тема: Асинхронність потоків AsyncTask (QuerryTask)

Стинкувся з проблемою: При запуску програми все компілюється, виконується. Але коли програма доходить до 83 рядка, ігнорує його і виходить з методу onClick(). Можливо хтось знає в чому проблема?
Код програми:

class OEQuerryTask extends AsyncTask<URL, Void, String> {

    @Override
    protected String doInBackground(URL... urls) {
        String response = null;
        try {
            response = getResonseFromURL(urls[0]);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return response;
    }
    @Override
    protected void onPostExecute(String responce) {
        result.setText(responce);
    }
}
...
@Override
    public void onClick (View v) {
        switch (v.getId()) {
            case R.id.show_url_button:
                URL generatedUrl = generateURL(pole_vvody.getText().toString());
                    new OEQuerryTask().execute(generatedUrl);                    // 83-ій рядок
                break;
...
Подякували: 0x9111A1

2

Re: Асинхронність потоків AsyncTask (QuerryTask)

Звідки можна взяти текст коду?

3

Re: Асинхронність потоків AsyncTask (QuerryTask)

Проблема у вісімнадцятому рядку.

Подякували: /KIT\, PRY, koala3

4

Re: Асинхронність потоків AsyncTask (QuerryTask)

Дозволи на Internet в Маніфесті прописані? Бо в мене, правда з моїми методами отримання URL(замість generateURL(pole_vvody.getText().toString())) і net-операції (замість getResonseFromURL(urls[0])), все працює.
Якщо прописані, шукайте причину в getResonseFromURL(urls[0]).
Взагалі було б правильно дати текст стеку повідомлення про помилку із Logcat. Звідти здебільшого можна зрозуміти, де і з якої причини сталась помилка.

Подякували: SaFed1

5

Re: Асинхронність потоків AsyncTask (QuerryTask)

PRY написав:

Дозволи на Internet в Маніфесті прописані? Бо в мене, правда з моїми методами отримання URL(замість generateURL(pole_vvody.getText().toString())) і net-операції (замість getResonseFromURL(urls[0])), все працює.
Якщо прописані, шукайте причину в getResonseFromURL(urls[0]).
Взагалі було б правильно дати текст стеку повідомлення про помилку із Logcat. Звідти здебільшого можна зрозуміти, де і з якої причини сталась помилка.

А як ще можна вказати щоб брався перший елемент масиву?

6 Востаннє редагувалося PRY (20.01.2019 21:36:35)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Про url[0] не йдеться зовсім. Оскільки коду методу getResonseFromURL() в мене немає, я просто вказав виклик методу getResonseFromURL(urls[0]), щоб позначити, які методи мені довелось замінити на власні, щоб перевірити працездатність вказаного Вами фрагменту програми:

    class OEQuerryTask extends AsyncTask<URL, Void, String> {
        
        @Override
        protected String doInBackground(URL... urls) {
            String response = "Default Response";
            try {
                response = httpOperationInputStream(urls[0]);
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            return response;
        }

7 Востаннє редагувалося PRY (20.01.2019 22:30:33)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Робочий код зі своїм net-методом закинув на GitHub. Код трохи "не причесаний", але працює.
https://github.com/MikhalUkr/AsyncTask_Question

Подякували: leofun011

8 Востаннє редагувалося PRY (22.01.2019 18:40:44)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Як справи? Є прогрес з пошуком помилки?

9

Re: Асинхронність потоків AsyncTask (QuerryTask)

PRY написав:

Як справи? Є прогрес з пошуком помилки?

Ідея полягала в тому, щоб програма перейшла по посиланню, зчитала об'єкт JSON, та вивела текстом в поле Text View. Думав що проблема в самому коді, але взявши тестовий сервак JSON-ну, виявилось що проблема посиланні або в доступі до нього. Тобто програма не працює при певному URL. Ще не розібрався з GitHub, тому кидаю проект на fex.net. Ось посилання: https://fex.net/955819040627

10 Востаннє редагувалося PRY (23.01.2019 18:51:10)

Re: Асинхронність потоків AsyncTask (QuerryTask)

На жаль, для доступу до файлів на https://fex.net/955819040627 потрібно реєструватись.
З GitHub набагато простіше. Реєструється тільки той, хто викладає проекти. Всі інші за посиланням отримують вільний доступ до репозиторію. Вміння працювати з SCV (Система контролю версій), до яких належить і GitHub, є стандартною вимогою до навичок програміста у любого роботодавця. На форумі є тема SCV https://replace.org.ua/forum/67/, де можна отримати відповіді на питання, якщо останні виникнуть при користуванні Git.
З приводу JSON, то в багатьох інформаційних систем (новинні, погода, каталоги книг і т.ін.) вимагається реєстрація на сайті, отримання ключа, який потрібно буде вказувати при зверненні до сервера.
Тому, можливо, причина не в програмі. Хоча програма не повинна зависати в таких ситуаціях. Як мінімум, повинен відпрацьовуватись тайм-аут, з інформуванням користувача, як іде процес, і завершенні процесу по закінченні часу очікування відповіді від сервера.
Так само, у випадку отримання некоректного JSON рядка, програма повинна належним чином відреагувати.
Яким конвертером JSON користуєтесь?

Подякували: leofun011

11 Востаннє редагувалося leofun01 (23.01.2019 21:45:10)

Re: Асинхронність потоків AsyncTask (QuerryTask)

SaFed написав:

Ще не розібрався з GitHub, тому кидаю проект на fex.net. Ось посилання: https://fex.net/955819040627

Про GitHub: Для викладання проекту в вільний доступ там нема з чим розбиратися.
Про FEX: Коли даєте посилання, то давайте його не на сторінку, а на сам архів (посилання видалено), щоб у користувача завантаження розпочалось негайно.
Про вміст архіву: Такі папки як build, caches, debug, tmp і деякі .idea/*, .gradle/* потрібно виключати зі списку додавання в архів. При роботі з Git'ом теж.

upd: Видалив посилання, бо воно було динамічне, на токенах. Тобто кожному користувачу в різні проміжки часу видається згенероване посилання.

Подякували: PRY1

12 Востаннє редагувалося PRY (25.01.2019 11:52:53)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Код з https://fex.net/955819040627 скачав.

SaFed: Ще не розібрався з GitHub

Стосовно Git та GitHub порадив би скачати книгу і(або) користуватись нею за посиланням:
https://git-scm.com/book/en/v2 англійською
https://book.git-scm.com/book/uk/v2 українською
На цій же сторінці посилання на скачування Git та на інші ресурси.
Повірте, часу забере не багато, зате ефективність роботи значно підвищує, навіть для себе, особливо, коли стикаєшся з питанням, яке легше візуалізувати, коли розбираєш сторонній код на цю тему.
Розділ про GitHub:
https://git-scm.com/book/en/v2/GitHub-A … figuration
https://book.git-scm.com/book/uk/v2/Git … 1%81%D1%83 українською

Подякували: leofun011

13 Востаннє редагувалося PRY (24.01.2019 23:01:21)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Думав що проблема в самому коді, але взявши тестовий сервак JSON-ну, виявилось що проблема посиланні або в доступі до нього. Тобто програма не працює при певному URL.

Програма, дійсно, для коректного URL відпрацьовує коректно. Тому з цієї точки зору до коду питань немає.

14

Re: Асинхронність потоків AsyncTask (QuerryTask)

PRY написав:

Думав що проблема в самому коді, але взявши тестовий сервак JSON-ну, виявилось що проблема посиланні або в доступі до нього. Тобто програма не працює при певному URL.

Програма, дійсно, для коректного URL відпрацьовує коректно. Тому з цієї точки зору до коду питань немає.

Чи може бути таке, що сайт обрізає доступ до об'єкту, через те що це не браузер, а додаток? Якщо так, то можливо ви знаєте як це пофіксити? Буду дуже вдячний за підказку!

15

Re: Асинхронність потоків AsyncTask (QuerryTask)

Сайт не знає, що з іншого боку TCP-потоку - він бачить лише запит із заголовками. Якщо ви подивитеся, які заголовки надсилає браузер, і повторите в застосунку - то отримаєте у відповідь те саме, що й браузер.
І так, багато сайтів дивляться заголовки і якщо там щось неочікуване, не відповідають.

Декалог програміста-початківця: https://replace.org.ua/post/132988/
Подякували: leofun01, PRY2

16 Востаннє редагувалося PRY (27.01.2019 20:00:02)

Re: Асинхронність потоків AsyncTask (QuerryTask)

SaFed написав:

Чи може бути таке, що сайт обрізає доступ до об'єкту, через те що це не браузер, а додаток? Якщо так, то можливо ви знаєте як це пофіксити? Буду дуже вдячний за підказку!

Ресурс, доступ до якого не вдається отримати з додатку на пристрої з Android:
https://chat.oe.if.ua:8085/chat/custome … l/29010028

Помилка виникає в процесі створення екземпляру InputStream
Якщо Ви користуєтесь Android Studio, то на закладці Logcat можна побачити наступний стек повідомлень про помилку:

Прихований текст
2019-01-27 15:05:06.451 8180-8246/i.oe.oev2 D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2019-01-27 15:05:07.101 8180-8246/i.oe.oev2 I/TAGNetworkUtils: ERROR: I/O Exception: InputStream is not created
2019-01-27 15:05:07.102 8180-8246/i.oe.oev2 W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.103 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:219)
2019-01-27 15:05:07.103 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
2019-01-27 15:05:07.103 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
2019-01-27 15:05:07.103 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
2019-01-27 15:05:07.103 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
2019-01-27 15:05:07.104 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
2019-01-27 15:05:07.104 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
2019-01-27 15:05:07.104 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
2019-01-27 15:05:07.104 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
2019-01-27 15:05:07.105 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
2019-01-27 15:05:07.105 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
2019-01-27 15:05:07.105 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
2019-01-27 15:05:07.106 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
2019-01-27 15:05:07.106 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(Unknown Source:0)
2019-01-27 15:05:07.106 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.utils.NetworkUtils.getResonseFromURL(NetworkUtils.java:41)
2019-01-27 15:05:07.107 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.MainActivity$OEQuerryTask.doInBackground(MainActivity.java:41)
2019-01-27 15:05:07.107 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.MainActivity$OEQuerryTask.doInBackground(MainActivity.java:35)
2019-01-27 15:05:07.107 8180-8246/i.oe.oev2 W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
2019-01-27 15:05:07.107 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2019-01-27 15:05:07.107 8180-8246/i.oe.oev2 W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
2019-01-27 15:05:07.108 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2019-01-27 15:05:07.108 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2019-01-27 15:05:07.108 8180-8246/i.oe.oev2 W/System.err:     at java.lang.Thread.run(Thread.java:764)
2019-01-27 15:05:07.112 8180-8246/i.oe.oev2 W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.113 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:646)
2019-01-27 15:05:07.114 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
2019-01-27 15:05:07.114 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
2019-01-27 15:05:07.115 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
2019-01-27 15:05:07.115 8180-8246/i.oe.oev2 W/System.err:     at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
2019-01-27 15:05:07.115 8180-8246/i.oe.oev2 W/System.err:     at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
2019-01-27 15:05:07.115 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:197)
2019-01-27 15:05:07.116 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:399)
2019-01-27 15:05:07.116 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
2019-01-27 15:05:07.116 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.SslWrapper.doHandshake(SslWrapper.java:374)
2019-01-27 15:05:07.116 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:217)
2019-01-27 15:05:07.116 8180-8246/i.oe.oev2 W/System.err:     ... 22 more
2019-01-27 15:05:07.118 8180-8246/i.oe.oev2 W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.118 8180-8246/i.oe.oev2 W/System.err:     ... 33 more
2019-01-27 15:05:07.118 8180-8246/i.oe.oev2 W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.119 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:219)
2019-01-27 15:05:07.119 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
2019-01-27 15:05:07.119 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
2019-01-27 15:05:07.119 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
2019-01-27 15:05:07.119 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
2019-01-27 15:05:07.120 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
2019-01-27 15:05:07.120 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
2019-01-27 15:05:07.121 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
2019-01-27 15:05:07.121 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
2019-01-27 15:05:07.123 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
2019-01-27 15:05:07.124 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
2019-01-27 15:05:07.125 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
2019-01-27 15:05:07.125 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
2019-01-27 15:05:07.126 8180-8246/i.oe.oev2 W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(Unknown Source:0)
2019-01-27 15:05:07.127 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.utils.NetworkUtils.getResonseFromURL(NetworkUtils.java:41)
2019-01-27 15:05:07.127 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.MainActivity$OEQuerryTask.doInBackground(MainActivity.java:41)
2019-01-27 15:05:07.127 8180-8246/i.oe.oev2 W/System.err:     at i.oe.oev2.MainActivity$OEQuerryTask.doInBackground(MainActivity.java:35)
2019-01-27 15:05:07.128 8180-8246/i.oe.oev2 W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
2019-01-27 15:05:07.128 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2019-01-27 15:05:07.128 8180-8246/i.oe.oev2 W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
2019-01-27 15:05:07.128 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2019-01-27 15:05:07.128 8180-8246/i.oe.oev2 W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2019-01-27 15:05:07.129 8180-8246/i.oe.oev2 W/System.err:     at java.lang.Thread.run(Thread.java:764)
2019-01-27 15:05:07.131 8180-8246/i.oe.oev2 W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.132 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:646)
2019-01-27 15:05:07.132 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
2019-01-27 15:05:07.132 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
2019-01-27 15:05:07.133 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
2019-01-27 15:05:07.133 8180-8246/i.oe.oev2 W/System.err:     at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
2019-01-27 15:05:07.133 8180-8246/i.oe.oev2 W/System.err:     at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
2019-01-27 15:05:07.134 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:197)
2019-01-27 15:05:07.134 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:399)
2019-01-27 15:05:07.134 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
2019-01-27 15:05:07.134 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.SslWrapper.doHandshake(SslWrapper.java:374)
2019-01-27 15:05:07.135 8180-8246/i.oe.oev2 W/System.err:     at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:217)
2019-01-27 15:05:07.135 8180-8246/i.oe.oev2 W/System.err:     ... 22 more
2019-01-27 15:05:07.135 8180-8246/i.oe.oev2 W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
2019-01-27 15:05:07.136 8180-8246/i.oe.oev2 W/System.err:     ... 33 more

Помилка на фрагменті коду:

Прихований текст
public class NetworkUtils {
    private static final String THIS_URL_WORKS = "https://api.myjson.com/bins/j5f6b";
    private static final String THIS_URL_DOESNT_WORKS = "https://chat.oe.if.ua:8085/chat/customer/physical/29010028";
    private static final String TAG = "TAGNetworkUtils";
    
    public static URL generateURL(String userID) {
//        Uri builtUri = Uri.parse(THIS_URL_WORKS); //Вставте замість THIS_URL_WORKS, змінну THIS_URL_DOESNT_WORKS
        Uri builtUri = Uri.parse(THIS_URL_DOESNT_WORKS);
        URL url = null;
        try {
            url = new URL(builtUri.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return url;
    }
    
    public static String getResonseFromURL(URL url) throws IOException {
        HttpURLConnection urlConnection = null;
        InputStream in = null;
        try {
            urlConnection = (HttpURLConnection) url.openConnection();
        } catch (IOException e) {
            Log.i(TAG, "ERROR: I/O Exception: (HttpURLConnection) url.openConnection() is not create");
            e.printStackTrace();
            throw e;
        }
        try {
            in = urlConnection.getInputStream();  //!!!! ERROR (NetworkUtils.java:41)
        } catch (IOException e) {
            Log.i(TAG, "ERROR: I/O Exception: InputStream is not created");
            e.printStackTrace();
            throw e;
        }
        try {
            Scanner scanner = new Scanner(in);
            scanner.useDelimiter("\\A");
            boolean hasInput = scanner.hasNext();
            
            if (hasInput) {
                return scanner.next();
            } else {
                return null;
            }
        }
        finally {
            urlConnection.disconnect();
        }
        
        
    }
    
    
}

Оскільки Url містить https, текст помилки

Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

говорить про певну невідповідність сертифікату сервера до вимог операційної системи Android.

17 Востаннє редагувалося PRY (27.01.2019 20:25:47)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Досить детальне пояснення до цього питання, - за цим посиланням:
https://developer.android.com/training/ … onProblems
https://developer.android.com/training/ … #MissingCa

Стаття Trust Anchor not found for Android SSL Connection https://stackoverflow.com/questions/682 … n#16302527 з форуму Let's Encrypt Community Support https://community.letsencrypt.org/t/let … roid/58867, як перевірити сертифікат і виправити проблему на стороні сервера.

Подякували: leofun011

18 Востаннє редагувалося PRY (28.01.2019 14:13:34)

Re: Асинхронність потоків AsyncTask (QuerryTask)

Якщо перевірити в "SSL Certificate Checker": https://www.digicert.com/help/,
помістивши https://chat.oe.if.ua:8085 в поле Server Address, отримуємо наступне:

Прихований текст

DNS resolves chat.oe.if.ua to 62.122.206.4
SSL certificate

Common Name = chat.oe.if.ua

Subject Alternative Names = chat.oe.if.ua

Issuer = Let's Encrypt Authority X3

Serial Number = 0333A296ADA576EFE0F79D1E529799158A94

SHA1 Thumbprint = D35881E8CC0B43AFECC44F29E10872CFC4F3AE1E

Key Length = 2048

Signature algorithm = SHA256 + RSA (excellent)

Secure Renegotiation: Supported
SSL Certificate has not been revoked
OCSP Staple:     Not Enabled
OCSP Origin:     Not Enabled
CRL Status:     Not Enabled

SSL Certificate expires soon

The primary SSL certificate expires on February 18, 2019 (22 days remaining)
Certificate Name matches chat.oe.if.ua
Subject    chat.oe.if.ua
Valid from 20/Nov/2018 to 18/Feb/2019
Issuer    Let's Encrypt Authority X3
SSL Certificate is not trusted

The certificate is not signed by a trusted authority (checking against Mozilla's root store). If you bought the certificate from a trusted authority, you probably just need to install one or more Intermediate certificates. Contact your certificate provider for assistance doing this for your server platform.


Heartbleed Vulnerability

Server is not vulnerable to the Heartbleed Bug because Heart beats are not enabled on this server.
Protocol Support

TLS 1.2, TLS 1.1, TLS 1.0
SSL ciphers supported by the server
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA

No known vulnerable Debian keys were found

Порівняйте з результатом для https://api.privatbank.ua:

Прихований текст

DNS resolves api.privatbank.ua to 52.214.51.78

HTTP Server Header: nginx
SSL certificate

Common Name = api.privatbank.ua

Subject Alternative Names = api.privatbank.ua

Issuer = RapidSSL RSA CA 2018

Serial Number = 03B46C7787F2D30BBEFF5CF94CA10483

SHA1 Thumbprint = DE75C206CDD65A00EF73D37CF1A1637577EC1D99

Key Length = 2048

Signature algorithm = SHA256 + RSA (excellent)

Secure Renegotiation: Supported
SSL Certificate has not been revoked
OCSP Staple:     Not Enabled
OCSP Origin:     Good
CRL Status:     Good

SSL Certificate expiration

The certificate expires September 10, 2019 (225 days from today)
Certificate Name matches api.privatbank.ua
Subject    api.privatbank.ua
Valid from 12/Jul/2018 to 10/Sep/2019
Issuer    RapidSSL RSA CA 2018
    
Subject    RapidSSL RSA CA 2018
Valid from 06/Nov/2017 to 06/Nov/2027
Issuer    DigiCert Global Root CA
    
Subject    DigiCert Global Root CA
Valid from 10/Nov/2006 to 10/Nov/2031
Issuer    DigiCert Global Root CA
SSL Certificate is correctly installed

Congratulations! This certificate is correctly installed.


Heartbleed Vulnerability

This server is not vulnerable to the Heartbleed Bug.
Protocol Support

TLS 1.2, TLS 1.1, TLS 1.0
SSL ciphers supported by the server
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

No known vulnerable Debian keys were found