@HubMan17

Почему не происходит заполнение переменных из потока?

Столкнулся с проблемой, что паршу сайт в android studio на java, узнал, что в основном потоке парсить нельзя и нужно делать это из нового потока, но вот проблема, не получается произвести запись данных в переменные из потока или что-то делаю не так, подскажите пожалуйста, как осуществить запись в данные класса из созданного потока, спасибо

public class MainActivity extends AppCompatActivity {

ListView listView;

MyListAdapter adapter;
ArrayList<String> URL_pict = new ArrayList<String>();


Document doc, doc1;
Elements content;
ArrayList<String> titleList = new ArrayList<String>();

public ArrayList<String> title = new ArrayList<String>();
public ArrayList<String> subTitle = new ArrayList<String>();
public ArrayList<String> imageID  = new ArrayList<String>();

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


    new NewThread().execute();

    listView = (ListView) findViewById(R.id.listView_id);

    adapter = new MyListAdapter(MainActivity.this, title, subTitle, imageID);
    listView.setAdapter(adapter);
}

public class NewThread extends AsyncTask<String, Void, String> implements com.example.test_listview.NewThread {

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

        try {
            doc = Jsoup.connect("...").get();
            content = doc.select("p, img");
            titleList.clear();

            titleList.add(doc.title());
            Elements table = doc.getElementsByClass("item-page");
            Element page = table.get(0);
            Elements links = page.select("a[href]");

            // picture_preview
            Elements pict_srcs = page.select("img[src]");

            // preview
            for (Element link : links) {
                //previewPict
                int count = 0;
                String pict_src = "some_links" + pict_srcs.get(count).attr("src").toString();
                URL_pict.add(pict_src);
                count++;

                doc1 = Jsoup.connect("..." + link.attr("href").toString()).get();

                // get header of news
                Elements titles = doc1.getElementsByClass("item-page");
                Element title2 = titles.get(0);
                Elements head = title2.select("h2");


                // main text of news
                Elements news_texts = doc1.getElementsByTag("p");
                Element news_text = news_texts.get(10);

                title.add("doc.title()");
                subTitle.add("news_text.text()");
                imageID.add("https://c4.wallpaperflare.com/wallpaper/71/196/981/digital-art-minimalism-nature-hills-wallpaper-preview.jpg");
                break;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}
  • Вопрос задан
  • 501 просмотр
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
Проблема, видимо, в том, что данные в новом потоке приходят позже, чем вы их подставляете в
adapter = new MyListAdapter(MainActivity.this, title, subTitle, imageID);

Т.е. у вас метод onCreate уже выполнен, а doInBackground еще даже не запустился. Соответственно и данные, которые он получил, уже никому не нужны.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы