如何从Firebase Realtime Database按UID获取数据并展示到ListView?
Firebase实时数据库数据检索与ListView展示问题及UID筛选实现
问题说明
- 数据已成功存入Firebase实时数据库,但无法检索并展示到ListView组件中
- 需要实现基于用户唯一UID筛选特定用户数据的功能
现有代码
MainPageActivity
public class MainPageActivity extends AppCompatActivity { private FirebaseAuth mAuth; private DatabaseReference mDatabase; private ArrayList<Reminder> mReminderList; private ReminderAdapter mReminderAdapter; private ListView mReminderListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_page); } }
ReminderAdapter
public class ReminderAdapter extends ArrayAdapter<Reminder> { private Context context; private int resource; private ArrayList<Reminder> remindersList; public ReminderAdapter(Context context, int resource, ArrayList<Reminder> remindersList) { super(context, resource, remindersList); this.context = context; this.resource = resource; this.remindersList = remindersList; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate(resource, parent, false); } TextView reminderTitle = convertView.findViewById(R.id.aTitle); TextView reminderdate = convertView.findViewById(R.id.aDate); TextView reminderTime = convertView.findViewById(R.id.aTime); Reminder reminder = remindersList.get(position); reminderTitle.setText(reminder.getTitle()); reminderdate.setText(reminder.getDate()); reminderTime.setText(reminder.getTime()); return convertView; } }
Reminder实体类
public class Reminder { String time; String title; String date; String uid; String key; public Reminder() { // Empty constructor required for Firebase } public Reminder(String title, String date, String time, String uid, String key) { this.title = title; this.date = date; this.time = time; this.uid = uid; this.key = key; } public String getUid() { return uid; } public void setUid(String uid) { uid = uid; } public String getKey() { return key; } public void setKey(String key) { key = key; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } }
数据库结构参考

解决方案
1. 修复实体类Setter方法错误
Reminder类的setUid和setKey方法存在变量名冲突,导致UID和Key无法正确赋值,修改如下:
public void setUid(String uid) { this.uid = uid; } public void setKey(String key) { this.key = key; }
2. 初始化组件并添加数据监听
在MainPageActivity的onCreate方法中完成Firebase组件初始化、ListView配置,并添加带UID筛选的数据监听:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_page); // 初始化FireAuth和Database引用 mAuth = FirebaseAuth.getInstance(); mDatabase = FirebaseDatabase.getInstance().getReference("reminders"); // 初始化ListView和数据集合 mReminderList = new ArrayList<>(); mReminderListView = findViewById(R.id.your_listview_id); // 替换为布局中实际的ListView ID mReminderAdapter = new ReminderAdapter(this, R.layout.your_list_item_layout, mReminderList); // 替换为列表项布局ID mReminderListView.setAdapter(mReminderAdapter); // 获取当前用户UID并筛选数据 if (mAuth.getCurrentUser() != null) { String currentUid = mAuth.getCurrentUser().getUid(); mDatabase.orderByChild("uid").equalTo(currentUid) .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { mReminderList.clear(); for (DataSnapshot dataSnapshot : snapshot.getChildren()) { Reminder reminder = dataSnapshot.getValue(Reminder.class); if (reminder != null) { reminder.setKey(dataSnapshot.getKey()); mReminderList.add(reminder); } } mReminderAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError error) { Log.e("FirebaseError", error.getMessage()); } }); } }
3. 数据库规则配置
确保Firebase实时数据库规则允许当前用户读写自己的数据:
{ "rules": { "reminders": { ".read": "auth != null && auth.uid == data.child('uid').val()", ".write": "auth != null && auth.uid == newData.child('uid').val()" } } }
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

