我一直有一个错误,即来自firebase的用户id显然是一个空对象,即使我做了一个if语句来检查它是不是。 错误:
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) {
}
};
我之前还没有这个问题很奇怪,因为我在其他几个类中使用了这个确切的片段,但它只是出现问题的地方。 任何帮助都表示赞赏,即使是在搜索此问题的答案时我错过了一个问题。谢谢你,祝你有个美好的一天。
答案 0 :(得分:0)
您收到null
,因为您在datas
方法之外使用onDataChange()
。发生这种情况是因为onDataChange是以异步方式调用的。这意味着您在该方法之外执行的所有操作都是在调用onDataChange()
方法之前执行的。要解决此问题,请在onDataChange()
方法中移动这些语句,并且everythig将正常工作。
希望它有所帮助。
答案 1 :(得分:0)
{
private FirebaseAuth mAuth;
...
mAuth = FirebaseAuth.getInstance();
if(mAuth.getCurrentUser() != null){
uID = mAuth.getCurrentUser().getUid();
}
...
}
我认为这可以解决您的问题