簡體   English   中英

在 Android 中檢索文本視圖時未顯示 Firebase 實時數據庫

[英]Firebase Realtime Database not displayed when retriving to textviews in Android

onCreate() 方法永遠不會執行。 我只想將以下數據帶到 4 個 TextView。 “Detail”是模型類。 運行應用程序時不會顯示任何錯誤。 view_temp 是一項活動。 這是 Firebase 實時數據庫

這是java

`public class view_temp extends AppCompatActivity {
    private view_temp viewTemp;
    public Detail detail;
    private TextView roomtemp, roomhuminity, bodypulse, bodytemp;
    private DatabaseReference mDatabase;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_temp);

        mDatabase = FirebaseDatabase.getInstance().getReference("heat-stroke-device");

        roomtemp = (TextView) findViewById(R.id.txt_room_temp);
        roomhuminity = (TextView) findViewById(R.id.txt_huminity_temp);
        bodypulse = (TextView) findViewById(R.id.txt_body_pulse);
        bodytemp = (TextView) findViewById(R.id.txt_body_temp);

        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    detail = postSnapshot.getValue(Detail.class);

                    String rtemp = detail.getRoomtemp();
                    String rhumidity = detail.getRoomhumidity();
                    String bpulse = detail.getBodypulse();
                    String btemp = detail.getBodytemp();

                    roomtemp.setText(rtemp);
                    roomhuminity.setText(rhumidity);
                    bodypulse.setText(bpulse);
                    bodytemp.setText(btemp);
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getMessage());
            }
        });
    }


}`

不需要在getReference()方法中添加項目名稱。 要正確獲取這些名稱和相應的值,請使用以下代碼行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.getKey();
            double value = ds.getValue(Double.class);
            Log.d("TAG", name "/" + value);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
rootRef.addListenerForSingleValueEvent(valueEventListener);

logcat 中的結果將是:

RoomHumi/86.0
RoomTemp/30.8
bodyPulse/126.0
bodyTemp/29.0

如果鍵總是固定的,那么只需使用:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double roomHumi = dataSnapshot.child("RoomHumi").getValue(Double.class);
        Log.d("TAG", "RoomHumi" "/" + valueroomHumi);
        double roomTemp = dataSnapshot.child("RoomTemp").getValue(Double.class);
        Log.d("TAG", "RoomTemp" "/" + roomTemp);
        double bodyPulse = dataSnapshot.child("bodyPulse").getValue(Double.class);
        Log.d("TAG", "bodyPulse" "/" + bodyPulse);
        double bodyTemp = dataSnapshot.child("bodyTemp").getValue(Double.class);
        Log.d("TAG", "bodyTemp" "/" + bodyTemp);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
rootRef.addListenerForSingleValueEvent(valueEventListener);

您將在 logcat 中獲得相同的結果。

只需更改您的線路

mDatabase = FirebaseDatabase.getInstance().getReference("heat-stroke-device");

mDatabase = FirebaseDatabase.getInstance().getReference();

注意:您不需要引用您的數據庫名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM