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