簡體   English   中英

從Firebase獲取特定用戶的正確數據

[英]get right data for specific user from Firebase

我有一個聊天應用程序,我試圖下拉已登錄用戶所屬的聊天組。 我正在努力爭取合適的團體。 這是我的firebase結構 所有成員都在組內的“成員”子級下。 我正在正常工作的recyclerview中顯示組。 對於任何登錄的用戶來說,這當然都是可行的,並且該用戶可以屬於許多不同的組。 希望您能想到,並能對我有所幫助。 謝謝

我的代碼:

private FirebaseDatabase mDatabase;
private DatabaseReference mDatabaseReference;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
private String projectId;
private List<DataService> grouplist;
private RecyclerAdapter recyclerAdapter;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAuth = FirebaseAuth.getInstance();
    mUser = mAuth.getCurrentUser();
    mDatabaseReference = mDatabase.getReference().child("groups");

    mDatabase = FirebaseDatabase.getInstance();
    mDatabaseReference.keepSynced(true);

    grouplist = new ArrayList<>();
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
}

protected void onStart() {
    super.onStart();
    grouplist.clear();

        mDatabaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            DataService groupData = dataSnapshot.getValue(DataService.class);

            grouplist.add(groupData);

            recyclerAdapter = new RecyclerAdapter(Main.this, grouplist);
            recyclerView.setAdapter(recyclerAdapter);
            recyclerAdapter.notifyDataSetChanged();

        }


        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

DataService.java

public class DataService {
public String subject;
public String projectName;
public String endDate;
public String members;
public String userid;
public String creationDate;
public String dropbox;
public String evernote;
public String googleDocs;

public DataService() {
}


public DataService(String subject, String projectName, String endDate, String members, String userid, String creationDate, String dropbox, String evernote, String googleDocs) {
    this.subject = subject;
    this.projectName = projectName;
    this.endDate = endDate;
    this.members = members;
    this.userid = userid;
    this.creationDate = creationDate;
    this.dropbox = dropbox;
    this.evernote = evernote;
    this.googleDocs = googleDocs;
}

public String getCreationDate() {
    return creationDate;
}

public void setCreationDate(String creationDate) {
    this.creationDate = creationDate;
}

public String getDropbox() {
    return dropbox;
}

public void setDropbox(String dropbox) {
    this.dropbox = dropbox;
}

public String getEvernote() {
    return evernote;
}

public void setEvernote(String evernote) {
    this.evernote = evernote;
}

public String getGoogleDocs() {
    return googleDocs;
}

public void setGoogleDocs(String googleDocs) {
    this.googleDocs = googleDocs;
}

public String getSubject() {
    return subject;
}

public void setSubject(String subject) {
    this.subject = subject;
}

public String getProjectName() {
    return projectName;
}

public void setProjectName(String projectName) {
    this.projectName = projectName;
}

public String getEndDate() {
    return endDate;
}

public void setEndDate(String endDate) {
    this.endDate = endDate;
}

public String getmembers() {
    return members;
}

public void setmembers(String members) {
    this.members = members;
}

public String getUserid() {
    return userid;
}

public void setUserid(String userid) {
    this.userid = userid;
}
}

使用實際的數據庫結構,您無法獲取用戶所在的所有組,除非您對數據庫進行了一些更改。 在您的情況下,您應該考慮通過在每個用戶對象下創建另一個名為groups節點來擴大數據庫結構,以允許反向查找,在該節點中,您應添加用戶所屬的所有組ID。 因此,您的數據庫結構應如下所示:

Firebase-root
   |
   --- users
         |
         --- userId
               |
               --- groups
                     |
                     --- groupIdOne: true
                     |
                     --- groupIdTwo: true

要獲得所有組的用戶是APPART,只是附加上的監聽groups節點並有所有你需要的群體。

但是您會思考,為什么要這樣做? 為什么要重復數據? 好吧,關於Firebase,復制數據沒有問題。 這是一種非常常見的做法,稱為反denormalization ,為此,我建議您觀看此視頻,“反規范化對於Firebase數據庫是正常的”

復制數據時,請記住一件事。 用與添加數據相同的方式,您需要對其進行維護。 換句話說,如果您想更新/刪除項目,則需要在它存在的每個位置進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM