我有我的结构化数据库火力像这样: 如何通过用户id在for循环中检索用户详细信息?
这是,如果我想通过传递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获取用户详细信息:
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;
}
你的问题是关于你在最后的代码片段中做了什么是正确的做法?如果是这样,从表面看,这对我来说看起来很好。考虑到你的'p-tasks'对象存储了对'User'对象的引用,使用另一个'DatabaseReference'解析用户似乎是合适的。 – Brian
准确地说,但我不能在方法'getUser()'中返回用户对象,如果我尝试创建一个全局用户对象实例并在此方法中初始化它'getUser()'出于某种原因,我正在更新用户界面,但我已测试它,并且用户对象不为空,但似乎它在未来的循环启动之前未初始化。 –
此链接很适合您的问题。我认为这对你有帮助https://stackoverflow.com/a/45328201/5973946 –