我最近一直在使用Android开发。我一直在开发一个社交网络应用程序。对于应用程序,我决定为所有数据库方法创建一个单独的帮助器类。在我的数据库中,所有用户都有一个用户ID,他们的信息存储在此ID下。我在这个类中有一个(非静态)方法,当给用户的信息位置一个DatabaseReference时,它会获得某些用户信息。该方法只需要引用,为单值事件添加一个监听器(addListenerForSingleValueEvent(ValueEventListener))。我遇到了这个问题,所以我尝试在ValueEventListener的onDataChange()方法中放入一个Log语句。奇怪的是,从未达到过这种Log方法。更奇怪的是,如果我将此方法中的代码复制并粘贴到我需要的位置之一,则会到达Log语句。有没有人知道为什么会这样?这是我在多个活动中使用的方法,并且在任何地方复制和粘贴代码会使代码非常草率。任何帮助将非常感激。谢谢!
更新:事实证明,如果放在Database类中,代码可以正常工作,但Log语句只会在方法结束后运行。下面是我用来观察此类的大纲。
片段类
public class FragmentClass extends Fragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDatabase = DatabaseManager.getInstance();
String userId = "userId";
mDatabase.getUserFromUserId(userId);
}
}
数据库类
public class DatabaseManager {
private static FirebaseDatabaseManager mInstance;
private static FirebaseDatabase mDatabase;
public static FirebaseDatabaseManager getInstance() {
if(mInstance == null) {
mInstance = new FirebaseDatabaseManager();
}
return mInstance;
}
private FirebaseDatabaseManager() {
mDatabase = FirebaseDatabase.getInstance();
}
public void getUserFromUserId(final String userId) {
DatabaseReference userReference = mDatabase.getReference(userId);
userReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("databaseTag", "reached");
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("databaseTag", "reached");
}
});
while(true) { // if this part is commented out, the log statement will be executed; otherwise, it won't
}
}
}