我为我的高级项目开发了这个应用程序并使用了SQLite并在本地存储了所有内容。我现在要将所有内容转换为Firebase,但是那里没有那么多教程,至少我想要做什么。我的问题是如何将下面的查询转换为Firebase数据库查询?
public ArrayList<String> getAllBeautyItems() {
itemsList.clear();
dbHelper.getReadableDatabase();
ArrayList<String> itemNames = new ArrayList<>();
String[] tableColumns = new String[]{
Constants.ITEM_NAME, Constants.CATEGORY
};
String whereClause = Constants.CATEGORY + "=?";
String[] whereArgs = new String[]{
"beauty"
};
Cursor result = db.query(Constants.ITEMS_TABLE_NAME, tableColumns, whereClause, whereArgs,
null, null, null, null);
if (result.moveToFirst()) {
do {
itemNames.add(result.getString(result.getColumnIndex(Constants.ITEM_NAME)));
} while (result.moveToNext());
}
result.close();
return itemNames;
}
然后在一个片段中我调用一个setName,那么如何获得该查询的结果并将其应用如下所示?
private ArrayList<Items> refreshData() {
dbItems.clear();
final ArrayList<String> itemNames = adapter.getAllBeautyItems();
ArrayList<String> itemImages = adapter.getAllBeautyImages();
ArrayList<Integer> itemPrices = adapter.getAllBeautyPrices();
ArrayList<String> itemDescriptions = adapter.getAllBeautyDescriptions();
ArrayList<String> itemLocations = adapter.getAllBeautyLocations();
ArrayList<String> itemLats = adapter.getAllBeautyLats();
int totalItems = adapter.getTotalBeautyItems();
String formattedItems = Utils.formatNumber(totalItems);
totalItemsText.setText("Total Items: " + formattedItems);
ArrayList<Items> items = new ArrayList<>();
for (int i = 0; i < itemNames.size(); i++) {
Items item = new Items();
item.setItemName(itemNames.get(i));
item.setItemImage(itemImages.get(i));
item.setItemPrice(itemPrices.get(i));
item.setItemDescription(itemDescriptions.get(i));
item.setItemLocation(itemLocations.get(i));
item.setLatLocation(itemLats.get(i));
items.add(item);
}
return items;
}
答案 0 :(得分:1)
首先,我想推荐你:https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html
这是一个教程,向您展示如何在Firebase中进行典型的SQL查询, BUT ,就像所有者说的那样:
虽然这篇文章仍然包含一些有用和相关的信息,但我们发布了高级查询功能,解决了本文讨论的许多问题。
所以,现在,我将告诉您可以解决您问题的基本查询。
正如我所看到的,你有一个关于项目的表格,你正在进行SELECT
项目的类别是美容
我将假设您已经知道Firebase中的数据存储方式,因此我不会浪费时间向您解释有关数据库树的信息。
您将需要以下内容:
Query query = FirebaseDatabase.getInstance().getReference()
.child("items")
.orderByChild("Category")
.equalTo("beauty");
这样,在将监听器附加到它之后,将在项目树中搜索其类别子项的值为美的项目树。这里的逻辑是:
FirebaseDatabase.getInstance().getReference()
- &gt;转到主节点.child("items")
- &gt;转到“项目”节点.orderByChild("Category")
- &gt;按类别孩子订购.equalTo("beauty")
- &gt;只看那些具有“美丽”价值的人您始终需要orderBy*()
附加equalTo()
并模仿WHERE
条款。
而且,在你的听众中,你会有类似的东西:
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
List<Item> list = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Item item = snapshot.getValue(Item.class);
list.add(item);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
//
}
};
query.addValueEventListener(eventListener);
并且,由于所有Firebase连接都是 async ,因此您需要一个calback方法才能在for
之后返回列表。
现在,对于上传,您将需要DatabaseReference而不是Query,例如:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("items");
您需要做的就是:
ref.push().setValue(item);
- &gt;对于随机ID ref.child(key).setValue(item);
- &gt;对于特定ID(密钥)