Android LiveData观察器未触发

时间:2020-07-30 19:32:25

标签: android android-livedata

我正在尝试在活动中添加一个观察者,但似乎从未触发。

我的应用程序上有一个按钮,该按钮使连接到手机的传感器开始测量数据,当传感器测量到它碰到我的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

中获取数据

有没有我可能错过的简单事情?

1 个答案:

答案 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不为空。否则,即使已调用日志,也看不到它。