Firebase数据库将数据加载到Listview中 [英] Firebase database load data into Listview

查看:101
本文介绍了Firebase数据库将数据加载到Listview中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个数据库结构:

{
    "customers" : {
       "-L-OcgJ0kwTNSm6HoSvG" : {
         "address" : "Test Alamat",
         "birthday" : "1990-12-03",
         "email" : "Dodi@gmail.com",
         "name" : "Dodi",
         "outletID" : "2673",
         "phone" : "09888777111"
       }
    }
}

现在,我想使用FirebaseUI-Android库将客户"的所有数据加载到ListView中.这是代码:

Now i want to load all data of "customers" into ListView using FirebaseUI-Android library. And here is the codes:

Query query = FirebaseDatabase.getInstance().getReference().child("customers").limitToLast(50);

FirebaseListOptions<Customers> options = new FirebaseListOptions.Builder<Customers>()
                    .setLayout(R.layout.row_customer)
                    .setQuery(query, Customers.class)
                    .build();

FirebaseListAdapter<Customers> adapter = new FirebaseListAdapter<Customers>(options) {
                @Override
                protected void populateView(View view, Customers customer, int position) {
                    ((TextView) view.findViewById(R.id.txtCustomerName)).setText(customer.name);
                    ((TextView) view.findViewById(R.id.txtCustomerAddress)).setText(customer.address);
                    ((TextView) view.findViewById(R.id.txtCustomerPhone)).setText(customer.phone);



  //and i've set the adapter into ListView
  ((ListView)layout.findViewById(R.id.lvCustomerList)).setAdapter(adapter);

这是Customers.java:

And here is Customers.java:

@IgnoreExtraProperties
public class Customers {
    public String name, outletID, address, phone, birthday, email;

    public Customers() {
    }

    public Customers(String name, String outletID, String address, String phone, String birthday, String email) {
       this.name = name;
       this.outletID = outletID;
       this.address = address;
       this.phone = phone;
       this.birthday = birthday;
       this.email = email;
    }
}

请帮助我,我的源代码有什么问题? 我已经运行它,数据无法显示(我的列表视图中只有空白).我的Android Studio日志没有错误.

Please help me what is the problem with my source code? i've run it and the data failed to display (only blank on my listview). There's no errors on my Android Studio logs.

推荐答案

我建议您创建自定义适配器并使用RecyclerView(它比ListView更快,更好)

I recommend to you to create custom Adapter and to use a RecyclerView (it is faster and better than a ListView )

类似这样的东西:

public class CustomerAdapter extends RecyclerView.Adapter<CustomerAdapter.MessageViewHolder> {
private List<Customer> customerList;                                                                        
private Context context;



public CustomerAdapter(List<Customer> customerList, Context context) {
    this.customerList= customerList;
    this.context = context;
}

@Override
public CustomerAdapter.MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   View v = LayoutInflater.from(parent.getContext())
                   .inflate(R.layout.your_layout, parent, false);
         return new CustomerAdapter.MessageViewHolder(v);
} 
public class CustomerViewHolder extends RecyclerView.ViewHolder {
     public TextView customername, customeraddress, customerphone;

     public CustomerViewHolder(View view) {
          super(view);
          customername = view.findViewById(R.id.txtCustomerName);
          customeraddress = view.findViewById(R.id.txtCustomerAddress);
          customerphone = view.findViewById(R.id.txtCustomerPhone);
     }
}

@Override
public int getItemCount() {
    return customerList.size();
}

@Override
public void onBindViewHolder(final CustomerAdapter.MessageViewHolder holder, final int position) {
      holder.customername.setText(customerList.get(position).getName;
      holder.customeraddress.setText(customerList.get(position).getAddress;
      holder.customerphone.setText(customerList.get(position).getPhone;

}

您可以得到如下数据:

FirebaseDatabase.getInstance().getReference().child("customers").addValueEventListener(new ValueEventlistener{
@Override
         public void onDataChange(DataSnapshot dataSnapshot) {
                List<Customer> custoemrList = new ArrayList<>();
                for (final DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Customer customer = new Customer();
                    customer.setName(snapshot.child("name").getValue().toString(); 
...
...
customerList.add(customer);

                }

                customerAdapter= new customerAdapter(customerList, YourActivity.this);
                recyclerView.setAdapter(chatsAdapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
});

在Customer类中,您必须添加getter和setter. 按Alt +插入-> Getters和Setters->全选-> Enter

And in your Customer class you have to add getters and setters. Press Alt + Insert -> Getters and Setters -> Select All -> Enter

应该是

这篇关于Firebase数据库将数据加载到Listview中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆