从数据库中检索后如何返回值?

时间:2017-04-12 02:11:38

标签: android multithreading firebase libgdx firebase-realtime-database

我使用的是一个名为LibGdx的框架,它是多平台的,所以当我需要编写特定于平台的代码时,我需要创建接口。例如,如果我想从我的db获得最高分,我会创建一个名为:

的接口方法
public int getTopScore();

在Android中,我然后实现此接口并编写Firebase Logic:

@Override
public int getTopScore() {
    DatabaseReference topScoreRef = 
        leaderboardDataBase.getReference("top_score");
    topScoreRef.child("top_score").addValueEventListener(new 
        ValueEventListener() 
    {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            //topScore is a member variable of the class
            topScore = snapshot.getValue(Integer.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return topScore;
}

这总是返回null并导致NullPointer异常。 我知道它与多线程有关。有没有办法在继续之前等待另一个线程完成,或者我必须完全重组。

由于

编辑:这是错误:

04-11 22:02:33.542 30334-30334/com.samuel.doubledodge E/Error: 
java.lang.NullPointerException: Attempt to invoke virtual method 'int 
java.lang.Integer.intValue()' on a null object reference
   at com.samuel.doubledodge.AndroidDatabaseAccess$1.onDataChange(AndroidDatabaseAccess.java:56)
   at com.google.android.gms.internal.zzbmz.zza(Unknown Source)
   at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
   at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5466)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:984)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

0 个答案:

没有答案