java - 如何在不更改数据的情况下从 firebase 检索数据?
问题描述
// 这是 MainActivity,我使用 firebase 存储示例数据,我可以在其中更新和检索。但是只有在数据发生变化时才能检索数据,但我想看看我已经在firebase 中的数据这里是数据库结构] 1
public class MainActivity extends
AppCompatActivity {
EditText name,weight;
Button uploadBtn;
TextView itemName,itemWeight;
DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference();
Map<String,String>values=new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=findViewById(R.id.inputItemName);
weight=findViewById(R.id.inputItemWeight);
uploadBtn=findViewById(R.id.uploadButton);
itemName=findViewById(R.id.resultName);
itemWeight=findViewById(R.id.resultWeight);
// 这里你可以看到我在上传新值之前使用了一个 ValueEventListener 来显示从数据库中检索的值但是它不起作用,除非数据的值被改变(也就是说它只有在上传新值之后才起作用)。
ValueEventListener valueEventListener=new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String nameD=(String) dataSnapshot.child("Name").getValue();
String weightD = (String) dataSnapshot.child("Weight").getValue();
itemName.setText(nameD);
itemWeight.setText(weightD+" Kg");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
databaseReference.addListenerForSingleValueEvent(valueEventListener);
uploadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
values.put("Name",name.getText().toString());
values.put("Weight",weight.getText().toString());
databaseReference.child("UToouch").setValue(values);
}
});
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String nameDb=(String) dataSnapshot.child("Name").getValue();
String weightDb = (String) dataSnapshot.child("Weight").getValue();
itemName.setText(nameDb);
itemWeight.setText(weightDb+" Kg");
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
解决方案
为了能够获取您Name
和Weight
属性的值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("UToouch");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("Name").getValue(String.class);
String weight = dataSnapshot.child("Weight").getValue(String.class);
Log.d(TAG, name + " / " + weight);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
ref.addListenerForSingleValueEvent(valueEventListener);
您的 logcat 中的输出将是:
rittesh / pv
推荐阅读
- angular - 如何在角度元素中实现定位?
- python - 对象检测 opencv 需要一个整数(获取类型元组)
- android - ListView.setAdapter(android.widget.ListAdapter)' 在 android 中的空对象引用
- linux - 如何以特定方式重命名目录。重击
- azure - az vim run-command 使用参数调用 shell 脚本
- php - Laravel Dusk 和内存使用 - 如何关闭浏览器和自定义进程
- python - 我需要尽快向服务器发送响应,然后在flask中执行函数吗?
- python - 将事件记录转换为有总和的期间
- amazon-web-services - AWS - 如何将任何视频或图像格式云转换为 MP4 或 JPG?
- java - 从数据库中获取值的代码自动完成显示下拉列表中的所有值