正しく照会するためにデータベースをどのように構造化するかに関するアドバイスが必要です。私はデータベースの構造がすべてであると理解していますが、正しく使用しているかどうかはわかりません。Firebaseのデータバス構造のアドバイス
私のアプリは、基本的にAPIからデータを取得し、それをリストビューに表示することになっています。リストビュー内のすべてのアイテム(新聞記事)は、firebaseユーザーからのコメントを持つことができます。
私はこのような "NewsPost"、 "User"、 "Comment"モデルを持っています。
NewsPost.class
private String id;
private String date;
private String title;
private String commentsNumber;
private List<Comment> comments;
private String imageUrl;
User.class
private String userName;
private String userAvatar;
private String firstName;
private String lastName;
private String eMail;
Comment.class
private UUID uuid;
private String postId;
private String message;
private String postDate;
private String userAvatar;
private String userName;
だからこれは私がそれを保存しようとした方法である:
、これは私は、ユーザが特定のnewsPostItemのコメントを読むためにクリックしたときにコメントを取得しようとする方法ですnewsPostIdをクエリパラメータとして持つlistView。
public void getComments(String postId) {
comments = new ArrayList<>();
Query query = databaseReference.child("comments").orderByChild(postId).equalTo(postId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot issue : dataSnapshot.getChildren()) {
Comment comment = issue.getValue(Comment.class);
comments.add(comment);
}
Log.d("GETCOMMENTS", "SNAPSHOT EXISTS");
view.onCommentsLoaded(comments);
}
else{
view.onCommentsLoaded(comments);
Log.d("GETCOMMENTS", "SNAPSHOT NOT EXISTS");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
view.onCommentsLoaded(comments);
Log.d("GETCOMMENTS", databaseError.getMessage());
}
});
}
私の質問は、amidoinitriteですか?
私は唯一のユーザであるため、今月警告(10 GB)の制限をダウンロードしました。
ご協力いただきましてありがとうございます。
サイドノート:userAvatarはデータベースのバイト[]に格納されていますが、いいですか?
希望のデータを取得できましたか? –
@AlexMamoはい、いいえ。クエリを使用すると、スナップショットは存在しません。 dbrefを使用するとコメントが表示されますが、firebase dbからの大きなサイズのリクエストについては不平を言います。私は1人のユーザーのために1ヶ月以内にほぼ10 GBのダウンロードを使用しているので、何かが明らかにひどい構造です... – JoSem