我正在尝试在活动中添加一个观察者,但似乎从未触发。
我的应用程序上有一个按钮,该按钮使连接到手机的传感器开始测量数据,当传感器测量到它碰到我的XsDevice()
类中的回调时。
这是我的XsDevice()
类中的代码
private MutableLiveData<ArrayList<Float>> accelerationData = new MutableLiveData<>();
public LiveData<ArrayList<Float>> freeAccDataLiveData = accelerationData;
@Override
public void onXsensDotDataChanged(String s, XsensDotData xsensDotData) {
ArrayList<Float> result = new ArrayList();
for (Float freeAcc: xsensDotData.getFreeAcc()) {
result.add(freeAcc);
}
accelerationData.postValue(result);
}
点击回调函数后,我正在使用postValue(result)
更新accelerationData
变量,这是我成为android开发新手的地方。
我想发布值之后,freeAccDataLiveData
变量将被更新,这就是我正在观察的情况。
这是我活动中的观察者代码
private XsDevice xsDeviceClass = new XsDevice();
protected void onCreate(Bundle savedInstanceState) {
...
xsDeviceClass.freeAccDataLiveData.observe(this, new Observer<ArrayList<Float>>() {
@Override
public void onChanged(ArrayList<Float> freeAccData) {
for(int i = 0; i < freeAccData.size(); i++){
Log.d("Free Acceleration Data", String.valueOf(freeAccData.get(i)));
}
}
});
}
...
只是我未包含的标准onCreate
代码的占位符。
我遇到的问题Log.d("Free Acceleration Data", String.valueOf(freeAccData.get(i)));
从未记录,这必须表示观察者没有工作。如果我将此日志直接添加到回调函数中,则可以正常工作,但我需要在MainActivity
有没有我可能错过的简单事情?
答案 0 :(得分:0)
仅当通过set或post更改数据时,才会调用livedata的观察者。因此,如果您不初始化XsDevice类中的值,则在分配数据之前不会调用它。
如果默认情况下要在OnCreate方法中获取回调,则需要这样设置加速度数据的默认值。然后,您可以在注册观察者后立即获得回调。
class XsDevice {
private MutableLiveData<ArrayList<Float>> accelerationData = new MutableLiveData<>();
public LiveData<ArrayList<Float>> freeAccDataLiveData = accelerationData;
public XsDevice() {
accelerationData.postValue(new ArrayList<>());
}
...
}
此外,请确保按预期方式调用了onXsensDotDataChanged,并且freeAccData不为空。否则,即使已调用日志,也看不到它。