-1
我一直有一個錯誤,其中來自firebase的用戶標識顯然是空對象,即使我做了一個if語句來檢查它是不是。 錯誤:Firebase UserID空指針異常當通過空檢查
FATAL EXCEPTION: main
Process: com.example.matthew.myapplication, PID: 18396
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.matthew.myapplication/com.example.matthew.myapplication.cb}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DataSnapshot com.google.firebase.database.DataSnapshot.child(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:223)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7223)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DataSnapshot com.google.firebase.database.DataSnapshot.child(java.lang.String)' on a null object reference
at com.example.matthew.myapplication.cb.getGameList(cb.java:112)
at com.example.matthew.myapplication.cb.onCreate(cb.java:69)
at android.app.Activity.performCreate(Activity.java:6877)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:223)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7223)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我不知道如何當它不應該是錯誤的發生。代碼處理這種情況的代碼片段:
public void getGameList(){
Boolean isDone = false;
int che = 0;
if(uID != null) {
while (isDone == false) {
String sche = Integer.toString(che); //error is on this line at uID
if (datas.child(uID).child("Game List").hasChild(sche)) {
list.add(datas.child(datas.child(uID).child("Game List").child(sche).getValue().toString()).child("GAME NAME").getValue().toString());
list.add(datas.child(datas.child(uID).child("Game List").child(sche).getValue().toString()).child("GAMEID").getValue().toString());
che = che + 1;
} else {
isDone = true;
}
}
}
}
user = FirebaseAuth.getInstance().getCurrentUser();
uID = user.getUid();
cont = (Button) findViewById(R.id.con);
back = (Button) findViewById(R.id.ret);
game = (Spinner) findViewById(R.id.games);
list.add("Select a Game");
list2.add("novalue");
myRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
datas = dataSnapshot;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
我也都沒有這個問題,因爲我用在其他幾類這個確切的片斷這之前是奇怪,但它只是在這些地方出現問題。 任何幫助的讚賞,即使這是一個問題,我錯過了當搜索這個問題的答案。謝謝你,有一個美好的一天。
我在其他部分有這種方式,它工作正常。 'onDataChange()'在'onCreate'中的所有內容之前被調用這個問題發生的唯一時間是該部分,它很麻煩。我會盡力而爲。 – Matt
在onDataChange方法實際分配它之前,變量'datas'將爲空。你需要那個價值在哪裏?在'DatabaseReference'中?只需在'onDataChange()'中直接使用它。 需要更復雜的東西,從'onDataChange()'調用一個單獨的方法並傳遞參數。如果你想要更復雜的東西,請嘗試同步代碼。 –
我需要在按鈕點擊事件中調用'datas'。但爲了防止這種情況,我正在使用if語句在繼續之前檢查它是否爲空。 – Matt