- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不确定我是否正确理解了一些文献。 Android 文档说不要创建不必要的对象。本文 ( Are Firebase queries scalable ) 提到数据库查询的可扩展性是可以的,但我也读到最好将查询存储到 ArrayList 中并通过它进行搜索,而不是查询大型数据库。
就我而言,我使用的是 Android 版 Firebase 实时数据库,我想知道如果我得到的子节点可能有 200 个示例/子节点,我是否应该将每个快照放入模型类中,然后将每个快照添加到 ArrayList 中,然后可以在 RecyclerView 中显示?或者我应该在字段上运行 .getValue() 并以其他方式存储它们?
我特别希望查看与雇主关联的公司 ID,然后转到“公司”节点并获取该雇主的企业名称和企业城市
数据库:
这是我在 Activity 中的代码部分:
companiesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()) {
Log.i("companiesSnap", ds.toString());
Log.i("KEYs", ds.getKey());
companyIDKey = ds.getKey();
//For each company ID in the Arraylist
for (int i = 0; i < myCompanyIDsList.size(); i++) {
//IF the IDs in arraylist from employee matches CompanyID from Companies node
if(myCompanyIDsList.get(i).equals(companyIDKey)) {
//IF THE ID matches, then get the associated company info
Log.i("city", ds.child("businessCity").getValue().toString());
Log.i("name", ds.child("businessName").getValue().toString());
Businesses business = new Businesses(ds);
myBusinessListItems.add(business);
mAdapter.updateDataSet(myBusinessListItems);
}
}
全类:
public class BusinessesActivity extends Activity {
private Context mContext;
LinearLayout mLinearLayout;
private RecyclerView mRecyclerView;
private MyAdapterBusiness mAdapter = new MyAdapterBusiness(this);
private RecyclerView.LayoutManager mLayoutManager;
ArrayList<Businesses> myBusinessListItems;
ArrayList<String> myCompanyIDsList;
DatabaseReference employeesRefID, companiesRef;
FirebaseDatabase database;
String currentUser, companyIDKey;
TextView getData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_businesses);
//RECYCLERVIEW STUFF
mRecyclerView = (RecyclerView) findViewById(R.id.b_recycler_view);
mContext = getApplicationContext(); // Get the application context
// Define a layout for RecyclerView
mLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false); //mLayoutManager = new LinearLayoutManager(mContext);
mRecyclerView.setLayoutManager(mLayoutManager);
// Initialize a new instance of RecyclerView Adapter instance
mRecyclerView.setAdapter(mAdapter);
//ARRAY List to Store EACH Company ID
myCompanyIDsList = new ArrayList<String>();
myBusinessListItems = new ArrayList<Businesses>();
currentUser =
FirebaseAuth.getInstance().getCurrentUser().getUid();
database = FirebaseDatabase.getInstance();
getData = (TextView) findViewById(R.id.getData);
companiesRef = database.getReference("Companies").child("CompanyIDs");
final DataSnapshotCallback callback = new DataSnapshotCallback() {
@Override
public void gotDataSnapshot(DataSnapshot snapshot) {
EmployeeUser employee = new EmployeeUser(snapshot);
//myCompanyIDsList.add(employee);
try {
for (DataSnapshot ds : snapshot.getChildren()) {
//WITHIN each UserId check the PushID
Log.i("TAG", "checkIfIDExists: datasnapshot: " + ds);
myCompanyIDsList.add(ds.getValue(EmployeeUser.class).getID());
Log.i("arrayList", myCompanyIDsList.toString());
//}
}
//GO THROUGH EACH COMPANY ID AND FIND INFORMATION
companiesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()) {
Log.i("companiesSnap", ds.toString());
Log.i("KEYs", ds.getKey());
companyIDKey = ds.getKey();
//For each company ID in the Arraylist
for (int i = 0; i < myCompanyIDsList.size(); i++) {
//IF the IDs in arraylist from employee matches CompanyID from Companies node
if(myCompanyIDsList.get(i).equals(companyIDKey)) {
//IF THE ID matches, then get the associated company info
Log.i("city", ds.child("businessCity").getValue().toString());
Log.i("name", ds.child("businessName").getValue().toString());
Businesses business = new Businesses(ds);
myBusinessListItems.add(business);
mAdapter.updateDataSet(myBusinessListItems);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("Cancelled", databaseError.toString());
}
}); //END COMPANIES EVENT LISTENER
//} //END FOR
} //END TRY
catch (Exception e) {
Log.i("FNull?", e.toString());
}
//mAdapter.updateDataSet(myListItems);
}
};
getData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
employeesRefID = database.getReference("Employees").child(currentUser).child("Companies"); //SEE HOW ADD EMPLOYEES checks
employeesRefID.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
callback.gotDataSnapshot(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("Cancelled", databaseError.toString());
}
}); //END EMPLOYEE EVENT LISTENER
Log.i("OutsideEvent", myCompanyIDsList.toString());
}
}); //END ONCLICK
Log.i("OutsideonClick", myCompanyIDsList.toString());
}
interface DataSnapshotCallback {
void gotDataSnapshot(DataSnapshot snapshot);
}
}
最佳答案
使用 Firebase 时减少内存使用量的技巧是仅加载要向用户显示的数据。
如果您需要仅包含公司名称的列表,请创建仅包含数据库中的公司名称的节点并显示该节点。这样您就可以减少所使用的带宽和内存,因为您没有加载公司的其他属性。
您通常会有一个“主列表”,其中包含每个公司(或其他实体类型)的所有属性。然后,您可能有一个或多个“显示列表”,其中仅包含您需要在某些区域显示的业务信息。这种重复数据在 NoSQL 数据库中很常见,称为非规范化。
如需更好的介绍,请阅读 Denormalizing Your Data is Normal , NoSQL data modeling ,并观看 Firebase for SQL developers .
关于java - Firebase 可扩展性 - 查询 DB 与自定义对象 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689541/
我最近的任务是估计 IIS 可以处理的并发用户数。不幸的是,我对 IIS 的经验为 0,所以我希望有人能指导我去哪里寻找。我希望在这个阶段我不必做我自己的基准测试。 我想知道它可以处理的并发连接数是多
我们正在考虑建立一个具有约 8000 个客户端和每个客户端一个队列的 MSMQ 系统。平均而言,系统每天需要处理来自每个客户端的约 2000 条消息,其中消息大小范围从 1K 到 MSMQ 最大大小
我们即将从一个内容丰富的网站开始,我们正在考虑使用 Dotnetnuke。 与联合国网站(http://www.un.org/en/index.shtml)相比,该网站将是多语言的 问题是:DotNe
我正在寻找有关 DB4O 对象数据库的信息。我知道它有客户端/服务器模式,但我不知道它的可扩展性如何。我非常喜欢对象数据库的想法,但仍然找不到合适的 OODB 用于我的任何项目。所以我的问题是: 我想
我目前使用 Sphinx Search 来优化我们的搜索页面。 该网站越来越受欢迎,这给 Sphinx 带来了更多负载。虽然此时没有什么可担心的,但我想知道 Sphinx 是如何扩展的。我在他们的网站
我对具有 OpenEJB 水平可扩展性配置的 Tomcat 感兴趣,以及它将如何管理分布式无状态 ejb:在每次调用时,是否可以从另一个 tomcat 服务器分配一个实例,例如在应用程序服务器中 -
SQLite 可以替代高流量网站中的 mysql 吗?谢谢 最佳答案 SQLite usually will work great as the database engine for low to
我想开发一个 iOS 应用程序,您可以在其中找到附近的人并与他们聊天。但是,我不知道 firebase 如何处理大量数据。 例子:所以,如果应用程序有 10 万用户。而且他们中的很多人总是在聊天,搜索
我正在尝试在我的新项目中使用 CQRS 和 EventSorcing。我正在遵循 Greg Young 几年前建议的方式(Mark Nijhof 实现 - http://cre8ivethought.
我有一个即将开展的项目,将与 70,000 多个用户(教育)打交道。我想知道 ASP.NET SqlMembership Provider 是否已经以如此大的容量使用过?假设硬件在那里,是否需要做一些
我们有非常简单的 Spark Streaming 作业(用 Java 实现),它是: 通过 DirectStream 从 Kafka 读取 JSON(关闭 Kafka 消息的确认) 将 JSON 解析
我正在使用tensorflow来训练DNN,我的网络结构非常简单,当只有一个参数服务器和一个worker时,每个minibatch大约需要50ms。为了处理巨大的样本,我使用分布式ASGD训练,但是,
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我正在使用 Crawler4j 爬虫来爬取一些域。现在我想提高爬虫的效率,我希望我的爬虫使用我的全部带宽并在给定时间段内爬取尽可能多的 url。为此我采用以下设置:- 我增加了编号。爬虫线程数到 10
我一直在寻找在 NUnit 中获取错误消息的方法。到目前为止,我找到了一些使用 IAddin 和 EventListener 来获取消息的类,但是没有用。我将此代码基于以下链接: About exte
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我已经使用 Poco 为 Linux 编写了一个代理服务器,但此后一直在阅读实现 TCP/IP 服务器可伸缩性的各种方法。我将需要服务器处理持久连接(不是 HTTP 流量),上限为大约 250 个同时
我正在尝试为自定义审计要求编写一个 SSMS 插件(需要审计用户在生产环境中运行的所有查询)。我有位于适当文件夹中的 .addin 文件,它在我的 Connect.Exec 方法中命中断点,我能够从事
我正在用 spark 处理数据,它可以处理一天的数据(40G),但失败了 OOM 一周的数据: import pyspark import datetime import operator sc =
当我将无服务器框架代码库部署到 AWS 时,我很好奇哪种方法会更好。 目前,有两种选择。 使用 Nest.js 或 Express.js,因此我将一个函数部署到 Lambda,该函数将处理所有 API
我是一名优秀的程序员,十分优秀!