我有以下类结构:
活动> 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;
}
实现观察的方式有关,但我没有找到任何其他方法来观察我的对象类中没有生命周期感知组件。有什么想法吗?