Cómo obtener los valores de una AsyncTask cuando está en otra clase

Ibanez1408:

Necesito conseguir el resultado de mi AsyncTask. De hecho, me puedo obtener el resultado de la tarea, sino que simplemente no saber como llegar desde el método que lo necesita. Como se verá, la AsyncTask pertenece a una clase diferente. Si usted tiene una pregunta para que pueda aclarar, por favor dígame para que pueda editar la entrada. Véase mi código de abajo:

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);
    }
    }
}

¿Cómo puedo hacer esto bien? Gracias.

Halex:

En primer lugar, AsyncTaskahora es obsoleto.

Si todavía quiere usarlo, crear una MutableLiveDatay devolverlo como LiveDataen la función expuesta, y luego pasarla a través del constructor de la AsyncTask. Utilizar el postValuemétodo de la MutableLiveDatapara establecer el resultado después de recibirlo.

Supongo que te gusta

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