Olá, pessoal.
Gostaria de entender melhor o funcionamento de um método usando o AsyncTask.  No atualiza abaixo, por exemplo, faço um filtro para aparecer somente as visitas cadastradas de acordo com a sua situação. Contudo, pelo log de erro, vi que estava dando NPE e coloquei o Toast para ver o que estava acontecendo. Ele realmente imprimia null e o motivo foi a declaração do array List<Visita> visitas_filtradas = new ArrayList<>(); antes do for.
public void atualiza(List<Visita> visitas) {
        List<Visita> visitas_filtradas = new ArrayList<>();
        for (int i = 0; i < visitas.size(); i++) {
            int finalI = i;
            new BuscaVisita_String_DaSituacaoTask(situacaoDAO, visitas.get(i), encontrada -> {
                if (encontrada != null) {
                    if (encontrada.equals(SITUACAO_CONTATO_ESCOLA_PARA) || encontrada.equals(SITUACAO_AMBIENTACAO_PARA)) {
                        visitas_filtradas.add(visitas.get(finalI));
                    }
                }else
                    Toast.makeText(context, encontrada, Toast.LENGTH_SHORT).show();
            }).execute();
        }
        this.visitas.clear();
        this.visitas.addAll(visitas_filtradas);
        notifyDataSetChanged();
    }Percebi que se eu colocasse a inicialização do array fora do método, como abaixo, o Toast imprimia a situação encontrada. Ou seja, não imprimir mais o null.
public void atualiza(List<Visita> visitas) {
-------------------------------------------------- Tirei o array visitas_filtradas que estava aqui e agora deu certo
        for (int i = 0; i < visitas.size(); i++) {
            int finalI = i;
            new BuscaVisita_String_DaSituacaoTask(situacaoDAO, visitas.get(i), encontrada -> {
                if (encontrada != null) {
                    Toast.makeText(context, "Aparece: " + encontrada, Toast.LENGTH_SHORT).show();
                    if (encontrada.equals(SITUACAO_CONTATO_ESCOLA_PARA) || encontrada.equals(SITUACAO_AMBIENTACAO_PARA)) {
                        visitas_filtradas.add(visitas.get(finalI));
                    }
                }else
                    Toast.makeText(context, "Não aparece: " + encontrada, Toast.LENGTH_SHORT).show();
            }).execute();
        }
        this.visitas.clear();
        this.visitas.addAll(visitas_filtradas);
        visitas_filtradas.clear();
        notifyDataSetChanged();
    }Deu certo em partes. O problema disso é que o array duplicava as visitas quando o método atualiza era chamado novamente. Teria que limpá-lo no início da chamada e, no código acima, o visitas_filtradas.clear(); ficou só no final. 
Porém, se eu coloco visitas_filtradas.clear(); antes do for, dá NPE novamente com um NULL.
Por que isso acontece e o que fazer, por favor?
 
            