-1
votes

Tenter d'invoquer la méthode directe 'Void sur une référence d'objet nulle

Pourquoi est-ce que je reçois l'erreur tentative d'invoquer la méthode directe 'void asyncfinished (com.ats.atsver2.ui.db.classes.user)' sur une référence d'objet null code>. Sur l'onpostexecute, je reçois un résultat, mais quand j'essaie de l'envoyer par le délégué, je reçois l'erreur.

Voici mon code: P>

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

    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 UserRepository delegate = null;

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


1 commentaires

Parce que vous n'initiez pas l'objet délégué, délégué d'usier privé = null;


3 Réponses :


0
votes

Vous avez créé délégué objet avec null valeur: xxx

et jamais après avoir assigné de la valeur.


0 commentaires

2
votes

Vous n'abandonnez jamais délégué code> à l'instance de classe extérieure lorsque vous créez un nouveau getuserbyusernamameasyncccTask code>. Comme il est nulle lorsque vous invoquez asyncfinished () code> il lancera une NPE.

public LiveData<User> getUserByUserName(String userName) {
    new GetUserByUserNameAsyncTask(userDao, this).execute(userName);
}


0 commentaires

1
votes

Vous devez mettre à jour le code comme celui-ci pour le faire fonctionner xxx


0 commentaires