Como obter valores a partir de um AsyncTask quando ele está em outra classe

Ibanez1408:

Eu preciso para obter o resultado do meu AsyncTask. Eu realmente pode obter o resultado da tarefa, mas eu só não sei como obtê-lo a partir do método que precisa dele. Como se vê, o AsyncTask está em uma classe diferente. Se você tem uma pergunta que eu possa esclarecer, por favor me diga que eu possa editar o post. Ver o meu código abaixo:

public class UserRepository {
    private UserDao userDao;
    private User user;
    private LiveData<List<User>> allUsers;

    public UserRepository(Application application) {
        AtsDatabase database = AtsDatabase.getInstance(application);
        userDao = database.userDao();
        allUsers = userDao.getUsers();
    }

 private MutableLiveData<User> userSearched = new MutableLiveData<>();
 private void asyncFinished(User userResult) {
    if(userResult == null) return;
    Log.i("TAG", "asyncFinished: " + userResult.getLastName());
    userSearched.setValue(userResult);
 }

    public LiveData<User> getUserByUserName(String userName) {
        new GetUserByUserNameAsyncTask(userDao).execute(userName); ===> I NEED THE RESULT HERE SO I CAN PASS IT TO MY VIEW MODEL
    }

    public LiveData<List<User>> getAllUsers() { return allUsers; }

    private static class InsertUserAsyncTask extends AsyncTask<User, Void, Void> {
        private UserDao userDao;

        private InsertUserAsyncTask(UserDao userDao) { this.userDao = userDao; }

        @Override
        protected Void doInBackground(User... users) {
            userDao.insert(users[0]);
            return null;
        }
    }

    private static class GetUserByUserNameAsyncTask extends AsyncTask<String, Void, User> {
        private LiveData<User> user;
        private UserDao userDao;

        private GetUserByUserNameAsyncTask(UserDao userDao) { this.userDao = userDao; }

        @Override
        protected User doInBackground(String... strings) {
             user = userDao.getUserByUserName(strings[0]); ======> I GET RESULT HERE 
             return null;
        }

         @Override
        protected void onPostExecute(User user) {
        super.onPostExecute(user);
        Log.i("TAG", "onPostExecute: "+user.getLastName());
        delegate.asyncFinished(user);
    }
    }
}

Como posso fazer isso certo? Obrigado.

Halex:

Primeiro de tudo, AsyncTaské agora obsoleta.

Se você ainda quiser usá-lo, crie um MutableLiveDatae devolvê-lo como LiveDatana função exposta, em seguida, passá-lo através do construtor do AsyncTask. Use o postValuemétodo do MutableLiveDatapara definir o resultado depois de obtê-lo.

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=397060&siteId=1
Recomendado
Clasificación