Android студия - AsyncTask и Looper в java - PullRequest
0 голосов
/ 26 марта 2020

Я столкнулся с исключением во время выполнения. Структура проекта такова:

MainActivity.java->workActivity.java, который также содержит myClass1, который расширяет AsyncTask

У меня есть еще один класс с именем GetData, который содержит переменные и другие методы для базы данных. .

Если я нажму кнопку в workActivity, то я сгенерирую:

myClass1 asyncT = new myClass1();
asyncT.execute("");

скачок кода в myClass1, где у меня есть:

public class taskRicercaRicambio extends AsyncTask<String, String, Boolean>
//variable
private GetData getData;
private int counter;
private List<myType> myList;

@override
protected void onPreExecute() {
super.onPreExecute();
// instruction for GUI thread...like progressDialog...}

@override
protected Boolean doInBackground(String... strings) {
int counter = 0;
myList = new LinkedList<myType>();
getData = new GetData();  // THIS LINE CAUSE EXCEPTION
Thread t1 = new Thread(new Runnable() {
    @override
    public void run() {
        Thread.currentThread().setName("myName");
        //... other instruction...
});
t1.start();
    try {
        t1.join(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    if(t1.isAlive()){
        t1.interrupt();
    }
    return true;
}

@override
protected void onPostExecute(Boolean s) {
//..do something with UI thread.......}

Почему строка getData = new GetData(); дает исключение? Если я введу это в методе onPreExecute(), все будет работать отлично. Нет ошибки. Но если нет, то почему я получаю

java.lang.RuntimeException: Can't create handler inside thread Thread[AsyncTask #2,5,main] that has not called Looper.prepare()

Почему я не могу создать экземпляр класса GetData в фоновом методе? Почему он просит меня за петух? Я не сделал GUI компонента для обновления.

ОБНОВЛЕНИЕ Я нашел ошибку. В методе doInBackground я создаю объект GetData, но внутри конструктора GetData я создаю другой объект типа myClassBug, и этот класс расширяет AppCompatActivity. Как только я удаляю расширения, все работает нормально.

Я не мог понять, почему он спросил меня, если мне не нужно обновлять интерфейс ... Я полагаю, по этой причине. Надеюсь, это поможет другому пользователю!

...