更新:我已經決定REDIT更好的澄清與更集中的代碼的問題。檢索當前用戶的DataSnapshot火力地堡
我遇到的問題是我有一個UserList對象的ArrayList,它是從前一個活動中選擇的用戶,我們將這個selectedUsers
稱爲。我有另一個對象,我想將selectedUsers
以及Firebase中的當前用戶分組。這將被稱爲mGroupMembers
,其中包含GroupMember對象。
我能夠將selectedUsers
納入ArrayList mGroupMembers
,但我無法將當前用戶(由其ID引用)插入到所述ArrayList中。我認爲問題在於Firebase。我不知道爲什麼當我撥打addListenerForSingleValueEvent
時,當前用戶的數據不會添加到mGroupMembers
ArrayList?
這裏是我的代碼:
public class TestActivity extends AppCompatActivity {
//Tag
private static String TAG = "TestActivity";
private List<UserList> selectedUsers;
private TextView mPickedText;
private TextView mCurrentText;
private TextView mMembCountText;
private List<GroupMembers> mGroupMembers;
private String memberNames;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
//Selected users from previous activity.
selectedUsers = (List<UserList>) getIntent().getSerializableExtra("users");
//Text Views
mPickedText = (TextView) findViewById(R.id.first_text);
mCurrentText = (TextView) findViewById(R.id.second_text);
mMembCountText = (TextView) findViewById(R.id.third_text);
//GroupMembs
mGroupMembers = new ArrayList<>();
//Current user.
final String currentUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("users").child(currentUserID);
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserList user = dataSnapshot.getValue(UserList.class);
GroupMembers member;
//If the current user...
if (Objects.equals(user.getUid(), currentUserID)) {
mCurrentText.setText("Current: " + user.getName());
member = new GroupMembers(user.getName(), user.getUsername(), user.getEmail(), user.getUid());
Log.d(TAG, "Member object contains...Name: " + user.getName() + "\n" +
"Username: " + user.getUsername() + "\n" +
"Email: " + user.getEmail() +
"uid: " + user.getUid());
selectedUsers.add(user);
mGroupMembers.add(member);
for (GroupMembers members : mGroupMembers) {
Log.d(TAG, "Member object contains...Name: " + members.getName() + "\n" +
"Username: " + members.getUsername() + "\n" +
"Email: " + members.getEmail() +
"uid: " + members.getUid());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//Picked user.
for (UserList selected : selectedUsers) {
GroupMembers member = new GroupMembers();
member.setName(selected.getName());
member.setUsername(selected.getUsername());
member.setEmail(selected.getEmail());
member.setUid(selected.getUid());
mGroupMembers.add(member);
mPickedText.setText("Selected: " + selected.getName());
}
for (GroupMembers members : mGroupMembers) {
memberNames = members.getName();
}
mMembCountText.setText("Group Members: " + mGroupMembers.size() + " ");
}
}
這裏是火力地堡數據庫
{
"users" : {
"S3l3yRh8TqRYNeTWQ7tKEdUe2K03" : {
"email" : "[email protected]",
"name" : "Antwon ",
"profilePicture" : " ",
"uid" : "S3l3yRh8TqRYNeTWQ7tKEdUe2K03",
"username" : "ant01"
},
"af7KgxP7QgZT3d6adtgwBRwnsaI2" : {
"email" : "[email protected]",
"name" : "Bill",
"profilePicture" : " ",
"uid" : "af7KgxP7QgZT3d6adtgwBRwnsaI2",
"username" : "Bill123"
}
}
}
這裏是當我登錄了mGroupMembers
ArrayList中會發生什麼:
D/TestActivity: Member object contains...Name: Antwon
Username: ant01
Email: [email protected]: S3l3yRh8TqRYNeTWQ7tKEdUe2K03
D/TestActivity: Member object contains...Name: Bill
Username: Bill123
Email: [email protected]: af7KgxP7QgZT3d6adtgwBRwnsaI2
D/TestActivity: Member object contains...Name: Antwon
Username: ant01
Email: [email protected]: S3l3yRh8TqRYNeTWQ7tKEdUe2K03
當前用戶( Antwon)正在添加,但爲什麼當我運行該程序時不顯示?現在程序只顯示所選用戶的名字以及當前用戶的名字。然後它顯示mGroupMembers
的大小。當然,它的大小隻有一個時,它應該是兩個。
您已經包含鏈接到JSON樹在你的問題的照片。請用實際的JSON替換爲文本,您可以通過單擊[您的Firebase數據庫控制檯](https://console.firebase.google.com/project/_/database/data/)中的導出JSON鏈接輕鬆獲取該文本。 。將JSON作爲文本可以搜索,使我們能夠輕鬆使用它來測試您的實際數據,並將其用於我們的答案中,並且通常只是一件好事。 –
謝謝你讓我知道這件事,我已經編輯了它@FrankvanPuffelen –
你的問題描述與你發佈的代碼不一致。你說:_我決定嘗試調試'selectedUsers.add(mCurrentUsers)'_。該聲明不在發佈的代碼中。 –