我正在Android工作室写一个应用程序。它连接到Firebase Firestore。
数据的结构如下(为了清晰起见,我去掉了不相关的部分):
Boxes
- box1
- grid_id
- table_id
-box2
- grid_id
- table_id
Grids
- grid1
- grid2
Tables
- table1
- table2
因此,每次检索一个框时,我还需要检索相应的网格和表。
在我的活动中,我有以下几点:
public class BoxViewActivity {
String box_id;
Box box;
FirebaseFirestore databaseRef;
BoxFragment boxFragment;
GridFragment gridFragment;
TableFragment tableFragment;
FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_box);
fragmentManager = getSupportFragmentManager();
boxFragment = fragmentManager.findFragmentById(R.id.fragment_box);
// Retrieve Box from database and set it up
Intent intent = getIntent();
box_id = intent.getStringExtra("BoxId");
box = new Box();
databaseRef = FirebaseFirestore.getInstance();
boxDocRef = databaseRef.collection("boxes").document(box_id);
boxDocRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
// Set up Box
box = document.toObject(Box.Class);
if (box != null) {
// Set up some box views
}
// Get grid/table key
setUpGrid(box.getGridId());
setUpTable(box.getTableId());
}
}
}
});
}
private void setUpGrid(String gridId) {
DocumentReference gridRef = databaseRef.collection("grids").document(gridId);
gridRef.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
// Retrieve Grid
Grid grid= document.toObject(Grid);
if (grid != null) {
boxFragment.setGrid(grid);
}
}
}
}
});
}
private void setUpTable(String tableId) {
if(tableId == null) return;
DocumentReference tableRef = databaseRef.collection("tables").document(tableId);
tableRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Table table = document.toObject(Table.Class);
if (table != null) {
boxFragment.setTable(table);
}
}
}
});
}
}
我遇到的问题是,应用程序似乎“冻结”,然后重新启动时,我点击这个活动。屏幕变为空白且无响应,然后应用程序重新启动。androidstudio没有抛出任何错误,调试控制台也没有任何错误。我怀疑这是因为我同时检索网格和表-这会减慢速度吗?如果是这样,有什么更好的方法?还是我错过了什么?