Asynctask не загружает весь контент

Я создал этот код для загрузки веб-контента и использовал asynctask. Когда URL-адрес начинается с «http», он не возвращает мне ошибку anythink only в журнале cat.

*"09-12 22:19:25.679 6894-6921/company.krystian.guessthecelebrity W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

09-12 22:19:25.754 6894-6921/company.krystian.guessthecelebrity E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da glUtilsParamSize: unknow param 0x000082da"*

Но когда URL-адрес начинается с «https», он возвращает мне часть контента и другую ошибку.

*"09-12 22:13:36.330 3057-3784/company.krystian.guessthecelebrity W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

09-12 22:13:36.390 3057-3784/company.krystian.guessthecelebrity E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da glUtilsParamSize: unknow param 0x000082da"*

public class MainActivity extends AppCompatActivity {

public class DownloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);

            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader reader = new InputStreamReader(in);

            int data = reader.read();

            while (data != -1) {

                char current = (char) data;

                result += current;

                data = reader.read();

            }
            return result;


        } catch (Exception e) {

            e.printStackTrace();

            return "Fail";

        }




    }

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DownloadTask task = new DownloadTask();
    String result = null;

    try {

        result = task.execute("http://www.ecowebhosting.co.uk/").get();

        Log.i("Contents of URL", result);

    } catch (InterruptedException e) {

        e.printStackTrace();

    } catch (ExecutionException e) {

        e.printStackTrace();

    }


}

Просто вставьте сюда ошибки вместо изображений

Antoniossss 13.09.2018 00:17

ЭТО несвязанные сообщения от GPU.

Gabe Sechan 13.09.2018 00:21

О, и НИКОГДА не используйте asynctask.execute (). Get (). Особенно в потоке пользовательского интерфейса. Это остановит ваше приложение, вероятно, вас убьет сторожевой таймер. Вместо этого любой код, которому нужен результат, следует поместить в onPostExecute. (иногда это нормально для потока без пользовательского интерфейса, но он настолько исчезающе мал, что, если вы не знаете, что делаете, просто не делайте этого).

Gabe Sechan 13.09.2018 00:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
123
1

Ответы 1

Это мой рабочий код, вырезанный, пожалуйста:

private class GetRegisterDateAsyncTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... voids) {
        String result = "";
        try {
            URL url = new URL("YOUR URL HERE");
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

            String inputLine;
            final StringBuffer buffer = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                buffer.append(inputLine);
            }

            in.close();

            result = buffer.toString();
        } catch (MalformedURLException e) {
            Crashlytics.logException(e);
            return "";
        } catch (IOException e) {
            Crashlytics.logException(e);
            return "";
        } catch (Exception e) {
            Crashlytics.logException(e);
            return "";
        }

        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        try {
             // check and use the result here
             ...
        } catch (Exception e) {
            Crashlytics.logException(e);
        }
    }
}

а это код вызова:

  GetRegisterDateAsyncTask registerDateAsyncTask = new GetRegisterDateAsyncTask();
        registerDateAsyncTask.execute();

Удачи )

Он также возвращает только часть контента.

krystian171217 13.09.2018 11:53

все время один и тот же контент или разный контент?

Hovanes Mosoyan 13.09.2018 12:20

Все время один и тот же контент зависит от веб-сайта, иногда его 5 строк, иногда 25% от полного контента.

krystian171217 13.09.2018 12:23

это может означать, что есть части страницы с отложенной загрузкой

Hovanes Mosoyan 13.09.2018 12:30

Я только что попробовал ваш URL-адрес, и все в порядке - весь контент успешно извлечен, в вашем приложении может быть что-то еще, что может заблокировать выполнение задачи

Hovanes Mosoyan 13.09.2018 13:11

для гарантии создайте новый проект и протестируйте только эту задачу, пожалуйста

Hovanes Mosoyan 13.09.2018 13:12

Я сделал новый проект и такая же ситуация

krystian171217 14.09.2018 10:46

Похоже, что с вашей средой разработки что-то не так. Вы используете Android Studio? Я могу отправить вам свой рабочий проект, если вы дадите мне письмо, пожалуйста,

Hovanes Mosoyan 14.09.2018 11:14

Другие вопросы по теме