簡體   English   中英

Firebase getInstance 返回 null

[英]Firebase getInstance returns null

我想從 firebase 下載數據。 我用下面的方法在活動中舒適地使用它。 在 mDatabase 中,我可以在調試模式下查看正在下載的數據,但我無法將其傳輸到我想要的代碼。 我在下面給出的代碼總是看起來 null。 我不知道怎么做...

謝謝你。

Firebase Json;

 "server" : {
    "time" : {
      "Time" : 1617695199510
    }
  }

這個;

mDatabase.child("/server/time/Time").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    server serverTime = null;
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        serverTime = snapshot.getValue(server.class);
                    }
                    MyApplication.getInstance().setmServer(serverTime); // This code always returns null. 
//I'm trying to pass the firebase value here. I am trying to pass the value here to setmServer (MyApplication).
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    hideProgressDialog();
                }
            });

MyApplication.java:

public server mServer = null;
private static MyApplication mInstance = null;

@Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
}
    public static MyApplication getInstance() {
        return mInstance;
    }

public server getmServer(){
        return mServer;
    }

    public void setmServer(server mserver){
        mServer = mserver;
    }

服務器.java:

@IgnoreExtraProperties
public class server {
    public long Time;

    public server(long Time) {
        this.Time = Time;

    }
}

不需要任何“.getChildren()”調用來循環“DataSnapshot”object。 您可以為此使用“服務器”class,或者更簡單的方法是使用以下代碼行直接從屬性獲取數據:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference timeRef = rootRef.child("server/time/Time");
timeRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            long time = task.getResult().getValue(Long.class);
            Log.d(TAG, "time: " + time);
        } else {
            Log.d(TAG, task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

logcat 中的結果將是:

time: 1617695199510

嘗試這個...

mDatabase.child("/server/time/Time").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    long time = dataSnapshot.getValue(Long.class);
                    Log.d(TAG, "Time :- " + time);
                    MyApplication.getInstance().setmServer(new server(time));
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    hideProgressDialog();
                }
            });

logcat 中的結果是..

Time :- 1617695199510

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM