Activity does not work as it should

Asked

Viewed 69 times

1

Good afternoon, I have a class that receives parameters from another Internet to perform the search in a webservice, when you enter onCreate, check if the instance is being created for the first time and if you do 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 don’t do this check, it works, but I have a nullpointer error. I broke my head and couldn’t 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;
    }
}
}
  • 1

    Put the error output, please.

  • Opa, I forgot to tell you, I managed to solve the problem. Thankful

  • Take the opportunity to publish your solution as a response. You can help someone in the future.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.