Как перекинуть спарсенную через jsoup информацию в первый поток из второго
Вот код Activity, пока сделал Main для теста. Проблема в том, что я сделал второй поток и в нем спарсил страницу и выцепил нужные куски. Проблема в том, что я теперь не могу обновить ТекстВьювы из второго потока. Если выполнять парсинг из первого потока, то тогда неминуемый краш.
package ru.ursna.trulate;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private String url = "https://tl.rulate.ru/book/29738/637191/ready";
private Document doc;
private Thread SecondThread;
private Runnable runnable;
TextView Title = findViewById(R.id.Title);
TextView TextContent = findViewById(R.id.Title);
String TextTitle = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
runnable = new Runnable() {
@Override
public void run() {
try {
load();
} catch (IOException e) {
e.printStackTrace();
}
}
};
SecondThread = new Thread(runnable);
SecondThread.start();
}
private void load() throws IOException {
doc = Jsoup.connect(url).get();
}
private void content() {
final String TextTitle = doc.title();
final Elements Text = doc.select("div.content-text");
}
}
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Для извещения главного потока о результатах работы используйте механизм обработчиков (handlers).
Он позволяет передавать сообщения и/или Runable в очередь сообщений потока.
public class MainActivity extends ... {
// предполагаем, что load выполняется в отдельном потоке
private void load() throws IOException {
doc = Jsoup.connect(url).get();
// Делаем все что нужно и получаем результат
MyResult result = ...
// Runnable переданный в post будет выполнен в главном потоке
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
// тут обновляем UI используя result т.д.
}
});
}
}