#java #android #firebase #firebase-realtime-database
#java #Android #firebase #firebase-база данных в реальном времени
Вопрос:
У меня есть мой проект Android, в котором есть два разных типа пользователей: администратор и обычный пользователь. На самом деле я нашел решение здесь, а не конкретно решение, поскольку оно не работает для меня.
Главная Fragment.java
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final String uid = user.getUid();
Query userQuery = FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("isAdmin");
userQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String type = dataSnapshot.child("isAdmin").getValue().toString();
if(type.equals("true")){
loadMenuBeachAdmin();
FloatingActionButton fab = (FloatingActionButton) homeView.findViewById(R.id.fab);
fab.show();
}
}
База данных
Ошибка, которую я получаю:
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference at
com.example.batangasbeachhousesfinal.HomeFragment$1.onDataChange(HomeFragment.java:92)
какая строка type = dataSnapshot.child("isAdmin").getValue().toString();
Комментарии:
1. Попробуйте поставить точку останова в этой строке и отладить значение DataSnapshot, DataSnapshot.child(«isAdmin»)… и попытайтесь увидеть, что происходит
2. @denis_lor возможно ли, что причина, по которой я получаю нулевую ссылку на объект, заключается в том, что я не смог получить uid прямо со страницы входа?
3. @Reymand ты пробовал мой ответ?
4. @PeterHaddad да, и это работает. спасибо за помощь. Это что-то вроде новшества. 🙂
Ответ №1:
Измените это:
Query userQuery = FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("isAdmin");
userQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String type = dataSnapshot.child("isAdmin").getValue().toString();
if(type.equals("true")){
loadMenuBeachAdmin();
FloatingActionButton fab = (FloatingActionButton) homeView.findViewById(R.id.fab);
fab.show();
}
}
в это:
Query userQuery = FirebaseDatabase.getInstance().getReference().child("User").child(uid);
userQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String type = dataSnapshot.child("isAdmin").getValue().toString();
if(type.equals("true")){
loadMenuBeachAdmin();
FloatingActionButton fab = (FloatingActionButton) homeView.findViewById(R.id.fab);
fab.show();
}
}
Ваш снимок данных уже находится в дочернем состоянии isAdmin
, поэтому вам нужно сделать один шаг вверх, и тогда вы сможете получить isAdmin
дочерний файл.