use*_*337 2 android firebase firebase-realtime-database
警告:我的查询会更理论化(抱歉程序员,请耐心等待我).我试图了解如何定义在Firebase中使用的数据库结构.
我正在探索使用Firebase作为我正在尝试构建的评论应用(在Android中)的后端.
该应用程序提供产品详细信息和审查不同类型的产品.所以这是一个示例用例.
Run Code Online (Sandbox Code Playgroud)Root | +--Smartphone | +--Manufacturer Name +--Screen Size +--Screen Density +--Processor +--RAM,...
Run Code Online (Sandbox Code Playgroud)Root | +--Product | +--Manufacturer Name +--Screen Size +--Screen Density +--Processor +--RAM +--Fuel type (Petrol/Diesel/Electric) +--Vehicle Type (Sedan/Hatchback) +--Vehicle Price,...
但是,上述数据结构存在的问题是,当我尝试对智能手机进行产品评审时,与Car相关的数据将保持空白.对于汽车的产品评审也是如此.
使用Flattening数据结构可以解决此问题.这是我感到困惑的地方.
Run Code Online (Sandbox Code Playgroud)Root | +--Smartphone | | | +--Manufacturer Name | +--Screen Size | +--Screen Density | +--Processor | +--RAM | +--Car | +--Fuel type (Petrol/Diesel/Electric) +--Vehicle Type (Sedan/Hatchback) +--Vehicle Price,...
但是,所有产品评论都将显示在单个活动/片段中.因此,每种产品类型都不会有不同的活动/片段.有人可以让我清楚地了解在我的用例中使用扁平数据结构吗?
问候
您可以像这样构建数据库:
products: {
smartphones: {
smartphone1: {
name: "Best Phone",
ram: "6 GB",
screen: "5.5 inch"
reviews: {
review1: true,
review2: true
}
}
},
cars: {
car1: {
name: "Lightning"
reviews: {
review3: true,
review4: true,
review5: true
}
}
}
},
product-review: {
review1: {
submittedBy: "Conqueror",
message: "Best phone at this price",
timestamp: 1472405901
},
review2: {
submittedBy: "Magic Blaster",
message: "Pros: RAM, Cons: Everything else.",
timestamp: 1472405901
},
review3: {
submittedBy: "Boss",
message: "Excellent Car",
timestamp: 1472405901
},
...
}
Run Code Online (Sandbox Code Playgroud)
每个产品(smartphone1,car1等..)都包含一个评论节点,因此您可以轻松加载特定产品的链接评论.
您可以为所需的节点生成时间戳.您可以将它添加到smartphone1,car1等..但它不是必需的.但是用户的评论需要时间戳,因为您应该在用户发布评论时显示.
看看这个答案,了解如何生成时间戳并将时间戳转换回可显示日期:
DateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss a");
Date someDate = (new Date(timestamp));
return sdf.format(someDate);
Run Code Online (Sandbox Code Playgroud)
您可以将用户评论存储在各自的节点中.
users: {
abcdefghijklm: { // User UID
name: "Conqueror",
reviews: {
review1: smartphone1,
review7: car1
}
},
nopqrstuvwxyz: {
name: "Magic Blaster",
reviews: {
review2: smartphone1
}
}
}
Run Code Online (Sandbox Code Playgroud)
要获取特定用户的评论,您可以获取用户的uid并使用它来显示评论.不幸的是,我从来没有在Android上使用Firebase,在Javascript中,我会这样做:
firebase.database().ref('users/'+userUID+'/reviews').on('value', function(snapshot) {
firebase.database().ref('product-review/'+snapshot.key).on('value', function(reviewSnapshot) {
console.log(reviewSnapshot.val().message);
});
});
Run Code Online (Sandbox Code Playgroud)
如果您只想查看用户"征服者"的评论,请设置userUID为他的唯一ID.以下是Firebase for Android从数据库中检索数据的官方文档.
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |