0
The Firebase query seems to return the data after generating the view, so it appears empty, but the data is populated in the log. What could I be doing wrong?
public class ConsultarActivity extends Activity
{
//CRIANDO UM OBJETO DO TIPO ListView PARA RECEBER OS REGISTROS DE UM ADAPTER
ListView listViewCompras;
//CRIANDO O BOTÃO VOLTAR PARA RETORNAR PARA A TELA COM AS OPÇÕES
Button buttonVoltar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_consultar);
//VINCULANDO O LISTVIEW DA TELA AO OBJETO CRIADO
listViewCompras = (ListView)this.findViewById(R.id.listViewCompras);
//CHAMA O MÉTODO QUE CARREGA AS PESSOAS CADASTRADAS NA BASE DE DADOS
this.CarregarPessoasCadastradas();
}
//MÉTODO QUE CONSULTA AS PESSOAS CADASTRADAS
protected void CarregarPessoasCadastradas(){
ComprasRepository comprasRepository = new ComprasRepository(this);
//BUSCA AS PESSOAS CADASTRADAS
List<ParcelaCartao> compras = comprasRepository.SelecionarTodos(this);
Log.v("info","compras em carregarpessoascadastradas: " + compras.toString());
// at this point the log shows the empty list.
//SETA O ADAPTER DA LISTA COM OS REGISTROS RETORNADOS DA BASE
listViewCompras.setAdapter(new LinhaConsultarAdapter(this, compras));
}
}
public class ComprasRepository
{
//DatabaseUtil databaseUtil;
Firebase ref;
/***
e * CONSTRUTOR
* @param context
*/
public ComprasRepository(Context context){
//Firebase.setAndroidContext(context);
//Log.v("info","Firebase.setAndroidContext");
}
/***
* CONSULTA TODAS AS compras CADASTRADAS NA BASE
* @return
*/
public List<ParcelaCartao> SelecionarTodos(Context context){
Firebase.setAndroidContext(context);
final List<ParcelaCartao> compras = new ArrayList<ParcelaCartao>();
ref = new Firebase(Config.FIREBASE_URL + "/Compras");
Log.v("info", "ref: " + ref.toString());
Query query = ref.orderByKey();
Log.v("info","query: "+ query.toString());
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot p1)
{
Log.v("info","ondatachange: ");
// TODO: Implement this method
if (p1.exists()){
Log.v("info","p1 existe ");
ParcelaCartao parcelacartao = new ParcelaCartao();
for (DataSnapshot childSnapshot : p1.getChildren())
{
parcelacartao= childSnapshot.getValue(ParcelaCartao.class);
compras.add(parcelacartao);
Log.v("info","compras: " + parcelacartao.toString());
//As informações retornam neste ponto mas após a exibição da view.
}
}else
Log.v("info","p1 nao existe ");
}
@Override
public void onCancelled(FirebaseError p1)
{
// TODO: Implement this method
Log.v("warn", p1.getMessage());
}
});
return compras;
}
}
public class LinhaConsultarAdapter extends BaseAdapter
{
//CRIANDO UM OBJETO LayoutInflater PARA FAZER LINK A NOSSA VIEW(activity_linha_consultar.xml)
private static LayoutInflater layoutInflater = null;
//CRIANDO UMA LISTA DE parcelas
List<ParcelaCartao> parcelascartao = new ArrayList<ParcelaCartao>();
//CIRANDO UM OBJETO DA NOSSA CLASSE QUE FAZ ACESSO AO BANCO DE DADOS
ComprasRepository comprasRepository;
//CRIANDO UM OBJETO DA NOSSA ATIVIDADE QUE CONTEM A LISTA
private ConsultarActivity consultarActivity;
//CONSTRUTOR QUE VAI RECEBER A NOSSA ATIVIDADE COMO PARAMETRO E A LISTA DE compras QUE VAI RETORNAR
//DA NOSSA BASE DE DADOS
public LinhaConsultarAdapter(ConsultarActivity consultarActivity, List<ParcelaCartao> parcelascartao ) {
this.parcelascartao = parcelascartao;
this.consultarActivity = consultarActivity;
this.layoutInflater = (LayoutInflater) this.consultarActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.comprasRepository = new ComprasRepository(consultarActivity);
}
//RETORNA A QUANTIDADE DE REGISTROS DA LISTA
@Override
public int getCount(){
return parcelascartao.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
//ESSE MÉTODO SETA OS VALORES DE UM ITEM DA NOSSA LISTA PARA UMA LINHA DO NOSSO LISVIEW
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//CRIANDO UM OBJETO DO TIPO View PARA ACESSAR O NOSSO ARQUIVO DE LAYOUT activity_linha_consultar.xml
final View viewLinhaLista = layoutInflater.inflate(R.layout.activity_linha_consultar,null);
//VINCULANDO OS CAMPOS DO ARQUIVO DE LAYOUT(activity_linha_consultar.xml) AOS OBJETOS DECLARADOS.
//CAMPO QUE VAI MOSTRAR O valor da compra
TextView textViewValorCompra = (TextView) viewLinhaLista.findViewById(R.id.textViewValCompra);
//CAMPO QUE VAI MOSTRAR a data da compra
TextView textViewDataCompra = (TextView) viewLinhaLista.findViewById(R.id.textViewDataCompra);
//CAMPO QUE VAI MOSTRAR a descrição
TextView textViewDescCompra = (TextView) viewLinhaLista.findViewById(R.id.textViewDescCompra);
//CAMPOS QUE VAI MOSTRAR numro de parcelas
TextView textViewNumParcelas = (TextView) viewLinhaLista.findViewById(R.id.textViewNumParcelas);
//CRIANDO O BOTÃO EXCLUIR PARA DELETARMOS UM REGISTRO DO BANCO DE DADOS
Button buttonExcluir = (Button) viewLinhaLista.findViewById(R.id.buttonExcluir);
//SETANDO valor da compra NO CAMPO DA NOSSA VIEW
textViewValorCompra.setText(String.valueOf(parcelascartao.get(position).getValor()));
//SETANDO a data da compra NO CAMPO DA NOSSA VIEW
textViewDataCompra.setText(String.valueOf(parcelascartao.get(position).getDatacompra()));
//SETANDO a descrição NO CAMPO DA NOSSA VIEW
textViewDescCompra.setText(String.valueOf(parcelascartao.get(position).getDescricao()));
textViewNumParcelas.setText(String.valueOf(parcelascartao.get(position).getParcelas()));
//CRIANDO EVENTO CLICK PARA O BOTÃO DE EXCLUIR REGISTRO
buttonExcluir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//EXCLUINDO UM REGISTRO
comprasRepository.Excluir(String.valueOf(parcelascartao.get(position).getKey()));
//MOSTRA A MENSAGEM APÓS EXCLUIR UM REGISTRO
Toast.makeText(consultarActivity, "Registro excluido com sucesso!", Toast.LENGTH_LONG).show();
//CHAMA O MÉTODO QUE ATUALIZA A LISTA COM OS REGISTROS QUE AINDA ESTÃO NA BASE
AtualizarLista();
}
});
return viewLinhaLista;
}
//ATUALIZA A LISTTA DEPOIS DE EXCLUIR UM REGISTRO
public void AtualizarLista(){
this.parcelascartao.clear();
//this.parcelascartao = comprasRepository.SelecionarTodos(this);
this.notifyDataSetChanged();
}
}