我使用的是一个名为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)