Я пытаюсь получить HTML исходный код по URL в android. Я видел много ответов SO и обучающих видео / видео по устранению неполадок, но у меня все еще возникает эта проблема.
Первый шаг к исправлению ошибки «слишком много работы над основным потоком» - создать отдельный поток для делать трудоемкое кодирование. Я уже делал это, но у меня все еще возникают проблемы с пропуском кадров. Я даже переместил код, который будет выполняться нажатием кнопки.
Исходный код для любого html загружается примерно до 4000 символов, а затем остальная часть исходного кода прекращается.
Мой код:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
src = findViewById(R.id.scrollview);
}
public void fetch(View v){
DownloadTask task = new DownloadTask();
String result = null;
try {
task.execute("https://www.zappycode.com");
result = task.get();
} catch (Exception e) {
Log.i("Error in thread: ",e.toString());
}
Log.i("Result", result);
}
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();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder res = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
res.append(line);
urlConnection.disconnect();
return res.toString();
} catch (Exception e) {
e.printStackTrace();
return "Failed";
}
}
}
Ошибка: 2020-05-05 16: 27: 38.119 14374-14374 / com.starw.sampledownload I / Хореограф: пропущено 124 кадра! Приложение может слишком много работать со своим основным потоком. 2020-05-05 16: 28: 00.281 14374-14397 / com.starw.sampledownload I / Surface: opservice is null false 2020-05-05 16: 28: 05.324 14374-14394 / com.starw.sampledownload W / System: Ресурсу не удалось вызвать end.
(я знаю, что это не ошибка, а предупреждение, но для моего варианта использования это ошибка, мне нужен весь источник страницы, а не его часть)