【发布时间】:2022-02-19 20:54:40
【问题描述】:
我正在努力获取来自Database 的Query 数据。
我的代码以某种方式工作,但我必须关闭屏幕并打开手机才能让数据显示在我的 ListView 中。TextView tvuserstorage 是我想用来过滤我的 @ 的值987654327@ 之后。我有另一个Activity,而我没有Query,这在同一个Database 上工作得很好。
希望有人能看到我做错了什么。
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_tool_list);
databaseUsers = FirebaseDatabase.getInstance("").getReference("Ansatte");
databaseTools = FirebaseDatabase.getInstance("").getReference("Verktøy");
mAuth = FirebaseAuth.getInstance();
user = FirebaseAuth.getInstance().getCurrentUser();
userID = user.getUid();
tvuserstorage = (TextView) findViewById(R.id.tv_userstorage);
svusertoollist = (SearchView) findViewById(R.id.sv_usertoollist);
lvusertoollist = (ListView) findViewById(R.id.lv_usertoollist);
usertoollist = new ArrayList<>();
databaseUsers.child(userID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Users userprofile = snapshot.getValue(Users.class);
if (userprofile != null) {
String user = userprofile.getUserStorage();
tvuserstorage.setText(user);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) { }
});
}
@Override
protected void onStart() {
super.onStart();
Query userlist = databaseTools.orderByChild("toolOwnerStorage").equalTo(tvuserstorage.getText().toString());
userlist.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
usertoollist.clear();
for (DataSnapshot snapshot1 : snapshot.getChildren()){
Tools tools = snapshot1.getValue(Tools.class);
usertoollist.add(tools);
}
ToolList adapter = new ToolList(UserToolListActivity.this, usertoollist);
lvusertoollist.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) { }
});
}
这是我在使用 userID 之前的日志:
I/TAG: xOPruRmASVcwlkEwr8Xr2mlCygw2
这是我的 Firebase 结构:
"Ansatte" : {
"xOPruRmASVcwlkEwr8Xr2mlCygw2" : {
"hasUserStorage" : "Ja",
"userAdmin" : "Nei",
"userDivision" : "Elektro",
"userEmail" : "booby@bob.com",
"userName" : "Bobby",
"userStorage" : "220"
},
"Ak2hetTTcRMLlapYHDZnTqUM1Ch2" : {
"hasUserStorage" : "Nei",
"userAdmin" : "Nei",
"userDivision" : "Blikk",
"userEmail" : "teddy@ted.com",
"userName" : "Teddy",
"userStorage" : ""
"Verktøy" : {
"3" : {
"toolGroup" : "",
"toolName" : "Wrench",
"toolOwner" : "",
"toolOwnerStorage" : "220",
"toolQRid" : "3",
"toolStatus" : "",
"toolType" : "",
"toolrenteddate" : ""
},
"1" : {
"toolGroup" : "",
"toolName" : "Pliers",
"toolOwner" : "",
"toolOwnerStorage" : "225",
"toolQRid" : "1",
"toolStatus" : "",
"toolType" : "",
"toolrenteddate" : ""
所以这就是我想要发生的事情:
当用户"xOPruRmASVcwlkEwr8Xr2mlCygw2" 登录时,我只想显示来自Verktøy 和child("toolOwnerStorage) 的数据等于Ansatte 和child("userStorage)。在某种程度上它适用于我发布的代码,但我必须打开和关闭屏幕才能显示它。但如果我拿走Query,它会显示一切都没有任何问题。
【问题讨论】:
-
请不要在此处传递空字符串:
FirebaseDatabase.getInstance("")。我很惊讶它甚至可以执行,但如果它确实执行了:如果您不需要在那里指定数据库 URL,只需不要传递任何值:FirebaseDatabase.getInstance() -
嗨弗兰克,我没有传递一个空字符串,我刚刚为这篇文章删除了它。
-
好的?? --- 您能否在
databaseUsers.child(userID)下显示您的数据库中存在哪些数据(作为文本,请不要截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 --- 你可以在使用userID访问数据库之前记录并显示它的值吗? --- 如果你在onDataChange内的第一行放置一个断点并在调试器中运行,它会到达该行吗? -
请编辑您的问题并添加弗兰克要求的信息,也请回复@。
-
@FrankvanPuffelen ,我添加了更多信息。希望你能帮我解决这个问题。
标签: java android firebase-realtime-database