使用LiveData和ObserveForever对延迟值进行递归调用

时间:2017-12-17 23:18:35

标签: android kotlin android-architecture-components android-livedata

我有以下类结构:

活动> ViewModel> DataManager> ApiManager

我尝试使用object在图层之间共享对象。 DataManager和ApiManager是kotlin observeforever,所以他们没有任何对活动的引用。为了实现&#34;回调&#34;我通过以下方式在DataManager和ApiManager中使用fun doStuff(inParam:String, inParam2:String)LiveData<Pair<String,Boolean>>{ var reponse:MutableLiveData<Pair<String,Boolean>> = MutableData() val requestResponse: LiveData<Pair<String, CustomType>>= ApiManager.doStuff(inParam1, inParam2) requestResponse.observeForever { //Do some task here response.value = Pair("ok",true) } return response }

LiveData

在实践中它按预期工作,通过这种结构,我使用VitalLint更新了我的活动。导出已签名的apk时出现我的问题。在此过程中称为LiveData,尽管已生成签名的apk,但当我阅读Error:java.lang.IllegalStateException: Recursive call in a lazy value under LockBasedStorageManager@351242ee (<unknown creating class>) 时,它会显示指向活动的以下错误:

val status:Boolean = either.second

错误与此行相关联:

observeForever

我怀疑这可能与我使用#include <iostream> #include <vector> template <typename T> class Vect{ public: std::vector<T> vect; Vect(std::vector<T> t){vect = t;} T index(int i){return vect[i];} void print(){ for(int i = 0; i < vect.size(); ++i){ std::cout << vect[i] << " "; } std::cout << std::endl; } void add(Vect<T> other){ for(int i = 0; i < vect.size(); ++i){ vect[i] = vect[i]+other.index(i); } } }; int main(){ std::vector<int> p1; p1.push_back(1); p1.push_back(2); p1.push_back(3); p1.push_back(4); Vect<int> vec1 = Vect<int>(p1);; Vect<int> vec2 = Vect<int>(p1);; vec1.print(); vec2.print(); vec1.add(vec2); vec1.print(); return 0; } 实现观察的方式有关,但我没有找到任何其他方法来观察我的对象类中没有生命周期感知组件。有什么想法吗?

0 个答案:

没有答案