Как из BackgroundWorker вернуть значение?
В общем, есть окно (activity) в котором я хочу получить значение из public class BackgroundWorker extends AsyncTask<String,Void,String> (класс для выполнения фоновой работы).
В activity происходит следующее:
BackgroundWorker backgroundWorker = new BackgroundWorker(this);
String type = "test";
String test1 = "test1";
String test2 ="";
backgroundWorker.execute(type, test1);
А в BackgroundWorker в protected String doInBackground(String...params) я получаю String result
И как мне вернуть result чтобы test2 приравнять к нему?
Ответы (1 шт):
Вообще - никак. Можно ужасным костылём, который ваше приложение сломает. Например так:
String test2 = backgroundWorker.execute(type, test1).get();
Но ни в коем случае так не делайте, т.к. это заморозит главный поток и приложение однажды выдаст ANR.
Вам надо просто учесть, что результат вызова не факт что придёт и неизвестно когда это вообще случится. Соответственно, вам надо создать метод, который может быть вызван если, вдруг, всё получится и результат выполнения задачи будет успешным. Этот метод объявите в интерфейсе, реализуйте его в активити и передайте активити в виде интерфейса через конструктор задачи. В onPostExecute вызовите метод переданного интерфейса. Так вызовется метод активити, в который вы сможете передать данные, полученные в задаче.