【发布时间】:2020-07-31 03:54:53
【问题描述】:
我正在尝试在我的活动中添加一个观察者,但它似乎从未被触发。
我的应用程序上有一个按钮,当传感器测量数据时,连接到我的手机的传感器会开始测量数据,它会在我的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 中获取数据
有没有我可能错过的简单内容?
【问题讨论】:
-
您确定
xsensDotData.getFreeAcc()返回非空列表/数组吗?尝试在result.add(freeAcc);附近添加日志。 -
@JeneaVranceanu 我只是通过将完全相同的日志行添加到回调函数并用
result替换freeAccData来仔细检查,并且正在显示日志 -
我测试的代码与您发布的完全相同。如果调用 onXsensDotDataChanged 并设置非空列表,观察者将收到它而不做任何更改。请添加更多日志以确保。
-
您的活动是否始终保持打开状态?也许它已经完成,当再次创建时,您希望看到一些结果。您确定这是发布更新的同一
XsDevice实例吗? -
@JeneaVranceanu @Brian 我刚刚意识到它是
XsDevice的不同实例,因为我在不同的活动中运行startMeasuring(),当我在相同的活动中运行startMeasuring()时它可以工作。我如何从不同的活动中观察?对不起我的错误!