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;
}
}
}
Put the error output, please.
– Pablo Almeida
Opa, I forgot to tell you, I managed to solve the problem. Thankful
– Ronaldo Lopes
Take the opportunity to publish your solution as a response. You can help someone in the future.
– Pablo Almeida