我有我的結構化數據庫火力像這樣: 如何通過用戶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 –