Activity does not work as it should

1

Good afternoon, I have a class that receives parameters from another try to search in a webservice, when it enters the onCreate, checks if the instance is being created the first time and if it does not call another TagsHolder class to do the encapsulation , it should do this check and activate setInProgress so that the listView becomes visible, if I do not do this check, it works, but I have a nullpointer error. I broke my mind and did not find the problem.

public class ShowResultsActivity extends Activity implements TaskFragment.TaskListener<List<Tags>>{
    String info;
    String array[] = new String[2];
    //Adapter para exibição das Tags na lista
private TagsAdapter adapter;

//Task para exibição de tags
private ListTagsTask task;

//Flag que indica se a lista de tags deve ser atualizada
private boolean refresh;

//Flag que indica se a lista de tags está em processo de atualização
private boolean inProgress;

private ListView listView;

private List<Tags> tags = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tags_list);

    listView = (ListView) findViewById(R.id.list);

    //Define o adapter para lista
    adapter = new TagsAdapter();
    listView.setAdapter(adapter);

    //cria a task
    task = TaskFragment.getInstance(this, ListTagsTask.class);

    //->O problema está aqui e não descobri como consertar.
    if(savedInstanceState == null){
        //Se a activity está sendo iniciada pela primeira vez, marca a flag de refresh para true
        refresh = true;
    }else {
        // Se a activity está sendo recriada após uma mudança de configuração, obtém a lista de tags que foi salva
        // previamente e carrega o adapter
        TagsHolder holder = (TagsHolder) savedInstanceState.getSerializable("tags");
        adapter.setTags(holder.getTags());
        // Se a lista estava em processo de atualização quando a configuração mudou, exibe o indicador de progresso
        inProgress = savedInstanceState.getBoolean("inProgress");
        if (inProgress) {
            setInProgress(true);
        }
    }
   /// array = this.getIntent().getStringExtra("paramsDate").split(";");
    //Toast.makeText(getApplicationContext(), array[0].toString(), Toast.LENGTH_SHORT).show();
    //Toast.makeText(getApplicationContext(), array[1].toString(), Toast.LENGTH_LONG).show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.actions, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId() == R.id.action_refresh){
        //faz o refresh da lista
        refresh();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
private void refresh(){
    if(!ConnectivityUtils.isConnected(this)){
        // Se não existe conexão de dados, mostra o dialog de erro e termina
        ConnErrorDialog.show(getFragmentManager());
    }else{
        //Executa a task de refresh
        task.execute(0);
    }
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    // Coloca a lista de Tags no Bundle para recuperação posterior. Encapsula a lista dentro de um
    // TagsHolder para que seja possível a inserção no Bundle
    outState.putSerializable("tags", new TagsHolder(adapter.getTags()));
    outState.putBoolean("inProgress", inProgress);
}

@Override
protected void onStart() {
    super.onStart();
    //Se o refresh deve ser feito, inicia o refresh
    if(refresh){
        refresh();
        refresh = false;
    }
}

private void setInProgress(Boolean inProgress){
    this.inProgress = inProgress;
    listView.setVisibility(View.VISIBLE);
}

@Override
public void beforeTaskExecute(int taskId) {
    // Exibe o indicador de progresso e remove os elementos da lista
    setInProgress(true);
    adapter.clear();
}

@Override
public void afterTaskExecute(int taskId, List<Tags> tagses) {
    // Coloca os elementos lidos na lista e esconde o indicador de progresso
    adapter.setTags(tagses);
    setInProgress(true);
}

// Método chamado na UI thread logo antes da task começar
public static class ListTagsTask extends TaskFragment<Void, List<Tags>> {

    @Override
    protected List<Tags> executeInBackground(int taskId) {
        try {
            //Cria o proxy de acesso ao webService
            WebServiceProxy proxy = new WebServiceProxy();
            //Obtém a lista de tags
            List<Tags> tags = proxy.listTags();

            //Sleep para atrasar o carregamento.
            SystemClock.sleep(1000);

            return tags;
        }catch (Exception e){
            Log.e(Constants.LOG_TAG, "Erro ao executar a task ", e);
            return Collections.emptyList();
        }
    }
}
//Classe que encapsula uma lista de tags. Necessária para salvar as tags em um Bundle
public static class TagsHolder implements Serializable {
    private List<Tags> tags;

    public TagsHolder(List<Tags> tags){
        this.tags = tags;
    }
    public List<Tags> getTags(){
        return tags;
    }
}
}
    
asked by anonymous 19.01.2016 / 19:32

0 answers