android - 如何通过输入任何给定属性的字符串从firebase搜索数据。?
问题描述
我想从 firebase 搜索数据。每当用户在搜索视图中输入任何内容时,它都会搜索相关数据。例如,如果用户输入公司名称,它应该显示与该公司相关的数据,或者如果用户输入价格,它应该显示与该特定价格相关的数据。我的 Recyclerview 工作正常。我正在获取数据,但它只根据公司名称搜索数据。
这是我的代码
private void getData(String query) {
Query firebaseSearchQuery = myRef.orderByChild("companyName").startAt(query).endAt("\uf8ff");
FirebaseRecyclerOptions<Package> options = new FirebaseRecyclerOptions
.Builder<Package>().setQuery(firebaseSearchQuery, Package.class).build();
final FirebaseRecyclerAdapter<Package, PackagesViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Package, PackagesViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull PackagesViewHolder packagesViewHolder, int i, @NonNull Package aPackage){
packagesViewHolder.setDetails(getApplicationContext(), packagesViewHolder, i, aPackage.getPackageName()/*, aPackage.getPackageType()*/, aPackage.getCompanyName(), aPackage.getData()
, aPackage.getOnNetMinutes(), aPackage.getOffNetMinutes(), aPackage.getSms()
, aPackage.getPrice(), aPackage.getValidity()
, aPackage.getSubscriptionCode(), aPackage.getUnsubCode()
, aPackage.getRemainingDataCode(), aPackage.getInfo()
/*, aPackage.getTermsAndConditions()*/);
}
@NonNull
@Override
public PackagesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_layout, parent, false);
PackagesViewHolder packagesViewHolder = new PackagesViewHolder(view, SearchActivity.this);
return packagesViewHolder;
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
解决方案
Firebase 上没有内置运算符来搜索节点的所有属性。如果您的应用需要此类功能,您可能需要考虑为此使用不同/额外的数据库,例如使用 Algolia 进行搜索,使用 Firebase 进行实时同步。
或者,您可以在 Firebase 中构建自己的搜索结构,正如我在此处的回答中所示:如何在 Firebase 中基于多个条件进行查询?
另见:
推荐阅读
- c# - 我可以在混合控制台和 WinForms 环境中保持工作程序和 GUI 分离而没有跨线程异常吗?
- python - 如果需要,在 Python 中防止连接字符串污染攻击
- android - 使用 kotlin 进行改造会引发无法连接到 {ServerName/IpAddress}
- javascript - 下载 pdf Chrome IOS
- python-3.x - 如何使用数组进行操作;二等分
- c++ - 使用 Eigen 将 -fopenmp 添加到程序会导致链接器错误
- java - 为什么不在 Java 中使用全局静态记录器?
- asp.net - 为什么我不能在 IIS 中使用 Windows 身份验证访问静态内容
- sql - 不提供结果的 PostgreSQL 命令
- c++ - 是否有 C++ 函数来比较变量的类型?