我同时使用Google Firebase和会议室数据库来存储我创建的事件对象,其中包含给定事件的所有详细信息。我使用Firebase进行在线存储和用户交互,并使用Room Database进行更轻松,持久的RecyclerView实施。
我的问题是,我的用于用用户半径内的事件填充Room Database的函数似乎根本没有在异步任务或覆盖onCreate方法的Room Database回调中完全执行。该函数在主线程上使用时已被完全调试,因此我认为它现在无法正常工作的原因与我对异步任务的工作原理缺乏了解有关。
这是我的函数,当前在Room Database类的onCreate方法中:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference().child("events").child("eventid");
if (ref != null) ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Event event = dataSnapshot.getValue(Event.class);
if (event != null) {
LatLng user_location = new LatLng(current_user.get(0).getLatitude(),
current_user.get(0).getLongitude());
LatLng event_location = new LatLng(event.getLatitude(), event.getLongitude());
int distance_preference = current_user.get(0).getDistance();
double distance_between_user_and_event = SphericalUtil
.computeDistanceBetween(user_location, event_location) / 1609.344;
if (distance_between_user_and_event <= distance_preference) {
eventDao.insert(event);
}
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
在异步任务中,我无法真正调试它,因为它不在主线程上(除非我不知道大声笑),并且在onCreate中该代码似乎根本不执行房间数据库的方法。显然我这里有些东西不见了。
另外,值得一提的是,我的EventDao,EventDatabase和EventRepository已全部调试完毕。我可以在运行时很好地使用它们-只是这个早期的填充任务无法正常工作!
非常感谢您的帮助!
答案 0 :(得分:0)
我创建的类似项目,使用了
✍️简单便笺制作应用程序使用Sqllite Room?缓存便笺,并使用Firebase数据库进行在线存储
https://github.com/LanguageXX/Simple-Note-App-with-Online-Storage
希望对您有帮助