.setText如何从控制器数据类中获取数据

时间:2019-08-26 05:58:37

标签: android firebase model-view-controller

Firebase数据正在进入应用程序,并在日志目录中显示,这没问题。我想显示用户界面中的数据,该数据将数据从HumidContoller解析为主要的Activity,但我不知道另一类的setText技术

TextView text_humidity = findViewById(R.id.textHum);
// Write a message to the database

HumiditySensorController humiditySensorController=new HumiditySensorController();
humiditySensorController.getAllHumidityData();
text_humidity.setText( "%");

通过以下方式从Firebase访问的湿度数据:

DatabaseReference myRef = database.getReference().child("Weather/Humidity");
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        System.out.println(" Value : " + dataSnapshot.getValue());
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            HumidityData data = new HumidityData(snapshot.getKey(), snapshot.getValue(String.class));
            System.out.println(" Value : " + data.getHumidity());
        }
    });

1 个答案:

答案 0 :(得分:0)

由于对Firebase的网络请求是异步的,因此需要在控制器和活动之间添加异步通信的方法。一种方法是通过回调接口。

您的控制器可以接收一个侦听器接口:

class HumiditySensorController {
    public interface HumidityDataListener {
        void onDataUpdated(HumidityData humidityData);
    }

    public void getAllHumidityData(HumidityDataListener humidityDataListener) {
        DatabaseReference myRef = database.getReference().child("Weather/Humidity");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                System.out.println(" Value : " + dataSnapshot.getValue());
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    HumidityData data = new HumidityData(snapshot.getKey(), snapshot.getValue(String.class));

                    if(humidityDataListener != null){
                        humidityDataListener.onDataUpdated(data);
                    }

                    System.out.println(" Value : " + data.getHumidity());
                }
            }
        });

    }
}

您的活动可以通过一个侦听器,如下所示:

final TextView text_humidity = findViewById(R.id.textHum);        
HumiditySensorController humiditySensorController=new HumiditySensorController();
humiditySensorController.getAllHumidityData(new HumiditySensorController.HumidityDataListener() {
            @Override
            public void onDataUpdated(HumidityData humidityData) {
                text_humidity.setText(humidityData + "%");
            }
        });