【发布时间】:2017-05-08 21:23:40
【问题描述】:
如果我想通过将 id 作为参数传递来获取用户详细信息,这就是我将如何使用 SQL 在数据库中构造我的表的方式。
但这并没有像我预期的那样工作。
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
for (final DataSnapshot snapshot : dataSnapshot.getChildren()) {
final String taskName = snapshot.child("name").getValue(String.class);
final String assignedUserId = snapshot.child("assignedUserId").getValue(String.class);
final String categoryId = snapshot.child("categoryId").getValue(String.class);
final Boolean completed = snapshot.child("completed").getValue(Boolean.class);
final String priority = snapshot.child("priority").getValue(String.class);
User user = getUser(assignedUserId);
ProjectTask projectTask
= new ProjectTask(snapshot.getKey(), dataSnapshot.getKey(), taskName, assignedUserId, priority, completed, categoryId, user);
mProjectTaskList.add(projectTask);
}
for (Category category : mCategories) {
mProjectTasksSection = getTasksWithSection(category);
if (mProjectTasksSection.size() > 0) {
mSectionedRecyclerViewAdapter.addSection(new ProjectTaskListAdapter(R.layout.lst_todo_item_v2, mProjectTasksSection,
category, getActivity()));
}
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerProjectTasks.setLayoutManager(linearLayoutManager);
recyclerProjectTasks.setItemAnimator(new DefaultItemAnimator());
recyclerProjectTasks.setAdapter(mSectionedRecyclerViewAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这里我已经获取了所有任务,现在我只需要一个参数,那就是用户详细信息,但我真的不知道如何获取它。我不确定这是否是正确的方法。如果我存储用户名而不是用户 ID,也许会更容易。下面我将发布我的代码,试图通过 id 获取用户详细信息:
private User getUser(String keyId) {
DatabaseReference databaseReference = AppController.getInstance().getDatabase()
.getReference().child("users").child(keyId);
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return null;
}
【问题讨论】:
-
您的问题是关于您在最后一个代码 sn-p 中所做的事情是否正确?如果是这样,从表面上看,这对我来说很好。鉴于您的
p-tasks对象存储了对您的User对象的引用,使用另一个DatabaseReference解析用户似乎是合适的。 -
没错,但我无法在方法
getUser()中返回用户对象,如果我尝试创建一个全局用户对象实例并在此方法getUser()中初始化它,出于某种原因我得到了稍后当我更新 UI 时为 null,但我已经对其进行了测试,并且用户对象不为 null,但似乎在下一个 for 循环开始之前它没有被初始化。 -
这个链接很适合你的问题。我认为这对你有帮助stackoverflow.com/a/45328201/5973946
标签: android firebase firebase-realtime-database