Итак, я создаю приложение, которое берет некоторый код HTML с сайта и возвращает некоторые данные обратно, но проблема в том, что AsyncTask, который я использую onCreate, не загружает весь код HTML просто отчасти так, как будто в какой-то момент происходит сбой, я довольно долго искал и пробовал множество решений, но ни одно из них не работает.
Единственные «ошибки», которые я получаю, - это слишком много работы над основной поток, но, насколько я понимаю, AsyncTask должен выполняться в фоновом режиме в другом потоке.
Вот класс AsyncTask:
public class SiteInfo extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
URL url;
String result;
InputStream inputStream;
BufferedReader bufferedReader;
try {
url = new URL(urls[0]);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream = url.openStream()));
String inputLine;
final StringBuffer buffer = new StringBuffer();
while ((inputLine = bufferedReader.readLine()) != null) {
buffer.append(inputLine);
}
bufferedReader.close();
result = buffer.toString();
Log.i("download", result);
inputStream.close();
return result;
}
catch (MalformedURLException e)
{
e.printStackTrace();
return "";
}
catch (IOException e)
{
e.printStackTrace();
return "";
}
catch (Exception e)
{
e.printStackTrace();
return "";
}
}
}
Вот метод, который очищает код HTML для информации:
public void getInfo()
{
final SiteInfo task= new SiteInfo();
String result;
try
{
result= task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,"*random site url*").get();
String[] temp;
Pattern urlName= Pattern.compile("<div class=\"image\"><img src=\"\"(,*?)\"/");
Matcher matcher=urlName.matcher(result);
for(int i=0; matcher.find(); i++)
{
temp=matcher.group(1).split("\" alt=\"");
imageURL.set(i,temp[i]);
name.set(i,temp[i+1]);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
И последний вызов метода в onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=findViewById(R.id.imageView);
startButton=findViewById(R.id.startButton);
getInfo();
}