Firebase Android:当我的数据库增长时出现问题
Posted
技术标签:
【中文标题】Firebase Android:当我的数据库增长时出现问题【英文标题】:Firebase Android: Having issues when my database grows 【发布时间】:2020-04-06 09:27:37 【问题描述】:在测试期间,我的数据库中有大约 30 个报价和大约 6 个用户。
我现在添加了我的报价。
总计约2000:
问题: 应用程序加载需要很长时间,它崩溃并进入页面等待应用程序或退出。然后我减少到 200 条报价,但仍有问题(可能会在崩溃前显示一条报价)
我在做什么? 我在我的数据库中引用我的报价,每次有人打开主页时都会得到一个随机报价(不知道如何每天得到一个报价)
引号的 JSON 片段:
"Quotes":
"1":
"Name": "Abbey, Edward",
"Quote": "In social institutions, the whole is always less than the sum of its parts. There will never be a state as good as its people, or a church worthy of its congregation, or a university equal to its faculty and students."
,
"2":
"Name": "Adams, George Matthew",
"Quote": "There is no such thing as a self-made man. We are made up of thousands of others. Everyone who has ever done a kind deed for us, or spoken one word of encouragement to us, has entered into the makeup of our character and our thoughts, as well as our success."
,
"3":
"Name": "Albani, Emma",
"Quote": "I had always loved beautiful and artistic things, though before leav"
,
"4":
"Name": "Borman, Frank",
"Quote": "Exploration is really the essence of the human spirit."
,
........等等
我的代码:
private void showQuote()
databaseReference = FirebaseDatabase.getInstance().getReference("Quotes");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
int count = (int) dataSnapshot.getChildrenCount();
for(DataSnapshot data: dataSnapshot.getChildren())
int rand = new Random().nextInt(count);
for (int i = 0; i < rand; i++)
String authorName = data.child("Name").getValue().toString();
String quoteGiven = data.child("Quote").getValue().toString();
name.setText("- " + authorName);
quote.setText(quoteGiven);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
Toast.makeText(MainActivity.this, "Loading Quote failed", Toast.LENGTH_SHORT).show();
);
我的规则:
"rules":
"users":
"$uid":
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
,
"Quotes":
".read": true,
".write": false
我要的是什么?
我希望能够每天显示报价,如果无法随机显示报价。如果我继续随机给出报价,我能做些什么来确保它不会使应用程序超载并使其崩溃。我想要很多引用而不是经常删除和添加新引用。
【问题讨论】:
这能回答你的问题吗? Select random entry from Firebase Realtime Database in Java 【参考方案1】:1.“应用加载需要很长时间”
你有databaseRef.keepSynced(true);
吗?
这将加载所有数据库,因此需要很长时间
你应该只阅读你想要的东西
或者你可以FirebaseDatabase.getInstance().setPersistenceEnabled(Base.dataPersistence);
它会保留数据而不需要长时间重复读取
2.你应该检查你的数据库,如果格式错误那么它会死
3.我有最简单的方法,你只需在你的firebase数据库根目录中记录大小,
只需读取size,生成随机int即可得到报价,或者先做一个随机数公式,可以轻松指定报价,无需全部下载。
【讨论】:
以上是关于Firebase Android:当我的数据库增长时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 和 Firebase - 如何确定每周增长