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());
}
});
答案 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 + "%");
}
});