首页 > 解决方案 > 如何在不更改数据的情况下从 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) {

        }
    });
}

}

标签: javaandroiddatabasefirebasefirebase-realtime-database

解决方案


为了能够获取您NameWeight属性的值,请使用以下代码:

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

推荐阅读