Firebase数据库Android问题

时间:2016-08-14 22:38:11

标签: android firebase firebase-realtime-database

我最近一直在使用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
    }
   }
 }

0 个答案:

没有答案