【发布时间】:2017-05-08 14:40:13
【问题描述】:
我无法将我的 firebase 数据库中的布尔值状态读取到我拥有的开关中。
我不断收到空指针异常,但该值存在于数据库中,所以不确定我做错了什么
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.content.Context android.view.ViewGroup.getContext()'
片段
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.display_match_details_fragment, container, false);
//FIREBASE
mFirebaseAuth = FirebaseAuth.getInstance();
firebaseUser = mFirebaseAuth.getCurrentUser();
final String uId = firebaseUser.getUid();
mFirebaseDatabase = FirebaseDatabase.getInstance();
usersDatabase = mFirebaseDatabase.getReference().child("users");
groupsDatabase = mFirebaseDatabase.getReference().child("groups");
tvAddedBy = (TextView) view.findViewById(R.id.tvAddedByMatchDisplay);
tvMatchTime = (TextView) view.findViewById(R.id.tvMatchTime);
tvMatchDay = (TextView) view.findViewById(R.id.tvMatchDay);
switchPlaying = (Switch) view.findViewById(R.id.switchPlay);
btnConfirmStatus = (Button) view.findViewById(R.id.btnPlayingConfirm);
switchPlaying.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean playingExtra) {
Snackbar.make(compoundButton, "Playing: " + playingExtra, Snackbar.LENGTH_SHORT)
.setAction("ACTION", null).show();
}
});
btnConfirmStatus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
readPlaying();
return view;
}// end onCreate
// Read playing times from DB
private void readPlaying() {
usersDatabase.child(firebaseUser.getUid()).child("playingExtra").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists() || dataSnapshot.getValue() == null) {
Toast.makeText(getActivity(), "NULL", Toast.LENGTH_SHORT).show();
}
else{
Boolean playingExtra = Boolean.valueOf(dataSnapshot.getValue().toString());
switchPlaying.setChecked(playingExtra);
}
}
全栈跟踪
05-08 15:57:00.461 2392-2601/com..squad E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8e53e40
05-08 15:57:01.046 2392-2392/com.ciaranbyrne.squad E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference
at android.support.design.widget.Snackbar.<init>(Snackbar.java:192)
at android.support.design.widget.Snackbar.make(Snackbar.java:224)
at com.ciaranbyrne.squad.DisplayMatchFragment$1.onCheckedChanged(DisplayMatchFragment.java:97)
at android.widget.CompoundButton.setChecked(CompoundButton.java:156)
at android.widget.Switch.setChecked(Switch.java:1070)
at com.ciaranbyrne.squad.DisplayMatchFragment$3.onDataChange(DisplayMatchFragment.java:134)
at com.google.android.gms.internal.zzajp.zza(Unknown Source)
at com.google.android.gms.internal.zzakp.zzcxi(Unknown Source)
at com.google.android.gms.internal.zzaks$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:168)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
05-08 15:57:15.694 2392-2601/com.ciaranbyrne.squad E/OpenGLRenderer: GL error: Out of memory!
【问题讨论】:
-
请添加您的数据库结构。
-
首先,当发布有关崩溃的问题时,完整的堆栈跟踪有助于准确定位哪条线路出现故障。其次,错误消息意味着在故障线上,您正在执行类似
<ViewGroup>.getContext()的操作,但ViewGroup是null,所以我不确定Firebase 与它有什么关系。最后,如果值已使用reference.setValue(<true/false>);设置,则只需要dataSnapshot.getValue(Boolean.class); -
根据建议添加了堆栈跟踪,我只是尝试使用 Boolean playingExtra = dataSnapshot.getValue(Boolean.class);但没有运气
-
发布您的活动
-
感谢您的评论,我对 Android 中的调试不太熟悉,但是根据您的建议查看堆栈跟踪后,它看起来与 SnackBar 有一些关系。仍在学习,但再次感谢您的提示
标签: android firebase firebase-realtime-database