Я столкнулся с исключением во время выполнения. Структура проекта такова:
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. Как только я удаляю расширения, все работает нормально.
Я не мог понять, почему он спросил меня, если мне не нужно обновлять интерфейс ... Я полагаю, по этой причине. Надеюсь, это поможет другому пользователю!