Intereting Posts
Есть ли способ получить видимую строку или диапазон видимых строк TextView? Android layout: этот тег и его дочерние элементы могут быть заменены одним <TextView /> и составным чертежом YouTubePlayer вместе с библиотекой AppCompat v7 Простые java-модульные тесты для android + gradle в Android Studio? Лучше использовать FragmentActivity (или ActionBarActivity) или системную активность при настройке min API 14 (ICS)? Как предотвратить разделение общего предпочтения в настройке Android – сбой при загрузке библиотеки Android: как показывать значок в ActionBar, но не в меню параметров? Ограничение по SMS для Android? Как воспроизводить звук с микрофона на динамик непосредственно на Android? Android-фильтр для http-схемы Отключить глобальный звук в Android Воспроизведение аудиофайла из каталога ресурсов Android.R.id.home не может найти символ Как создать полностью настраиваемый диалог / всплывающее окно в Android (изменить цвет наложения и расположение диалогового окна)

База данных Firebase возвращает значение null каждый раз при чтении

У меня есть класс для чтения данных из моей базы данных, но он всегда возвращает null .

Вот java-файл

 public class UserActivity extends AppCompatActivity { TextView textView; private FirebaseDatabase mFirebaseDatabase; private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener mAuthListener; private DatabaseReference myRef; private String userID; private String TAG = "hifiwi"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user); textView = (TextView) findViewById(R.id.textView); ////////////////////////////////////////////////////////////// mAuth = FirebaseAuth.getInstance(); mFirebaseDatabase = FirebaseDatabase.getInstance(); myRef = mFirebaseDatabase.getReference(); FirebaseUser user = mAuth.getCurrentUser(); userID = user.getUid(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = mAuth.getCurrentUser(); if (user != null) { Toast.makeText(UserActivity.this, "Signed in with " + user.getEmail(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(UserActivity.this, "Successfully signed out...", Toast.LENGTH_SHORT).show(); } } }; myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { showData(dataSnapshot); } @Override public void onCancelled(DatabaseError databaseError) { } }); /////////////////////////////////////////////////////////////// } private void showData(DataSnapshot dataSnapshot) { for (DataSnapshot ds : dataSnapshot.getChildren()) { UserInformation uInfo = new UserInformation(); uInfo.setEmail(ds.child(userID).getValue(UserInformation.class).getEmail()); uInfo.setName(ds.child(userID).getValue(UserInformation.class).getName()); uInfo.setPassword(ds.child(userID).getValue(UserInformation.class).getPassword()); uInfo.setPhoneno(ds.child(userID).getValue(UserInformation.class).getPhoneno()); Log.i(TAG, " " + uInfo.getEmail()); //Always returning null Log.i(TAG, " " + uInfo.getName()); //Always returning null Log.i(TAG, " " + uInfo.getPassword()); //Always returning null Log.i(TAG, " " + uInfo.getPhoneno()); //Always returning null } } @Override protected void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); } @Override protected void onStop() { super.onStop(); mAuth.removeAuthStateListener(mAuthListener); } } 

Операторы журнала всегда возвращают значение null .

Это моя структура базы данных в t2-login (название проекта).

 { "Users" : { "8dQ8unnqQXa69nkxUFKrcgiTM3S2" : { "emailuser" : "sam@gmail.com", "mobileUser" : "1234567899", "nameuser" : "sam", "passworduser" : "sammypp" }, "DIMBAk4CHZdWGbxN9kPESwIrw9b2" : { "emailuser" : "hsjsjsjjsjsj@mdm.mdmdmdmndn", "mobileUser" : "9999999999", "nameuser" : "hshs", "passworduser" : "ppppppl" }, "YJhf16ZyfWUn1Dou3BPcIkSSmVm1" : { "emailuser" : "test2@gmail.com", "mobileUser" : "1234567892", "nameuser" : "test2", "passworduser" : "test2pp" }, "yQEFEe5x06hvSZP18Mmb6OfNqnB2" : { "emailuser" : "test1@gmail.com", "mobileUser" : "1234567891", "nameuser" : "test1", "passworduser" : "test1pp" } } } 

UserInformation.class

 package com.rishav.t2; /** * Created by rishav on 6/27/2017. */ public class UserInformation { private String email; private String name; private String phoneno; private String password; public UserInformation() { } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneno() { return phoneno; } public void setPhoneno(String phoneno) { this.phoneno = phoneno; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 

Установите myRef в: myRef = FirebaseDatabase.getInstance().getReference("Users").child(user.getUid());

Также измените это:

  private void showData(DataSnapshot dataSnapshot) { UserInformation uInfo = ds.getValue(UserInformation.class); Log.i(TAG, " " + uInfo.getEmail()); //Always returning null Log.i(TAG, " " + uInfo.getName()); //Always returning null Log.i(TAG, " " + uInfo.getPassword()); //Always returning null Log.i(TAG, " " + uInfo.getPhoneno()); //Always returning null } 

Переменные класса UserInformation соответствуют именам ключей, которые существуют в базе данных firebase:

 public class UserInformation { public String emailuser; public String nameuser; public String mobileUser; public String passworduser; public UserInformation() { } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneno() { return phoneno; } public void setPhoneno(String phoneno) { this.phoneno = phoneno; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } 

}

попробуй это

  myRef.child("Users").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { showData(dataSnapshot); } @Override public void onCancelled(DatabaseError databaseError) { } }); 

Попробуйте этот путь

 FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("users"); myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { userList = new ArrayList<User>(); dataSnapshot.getChildrenCount(); //List<User> list= new ArrayList<User>(); for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) { User user = childDataSnapshot.getValue(User.class); userList.add(user); } Log.e("hello","childDataSnapshot"+ userList.size()); adapter.update(userList); } @Override public void onCancelled(DatabaseError error) { // Failed to read value Log.w("MY", "Failed to read value.", error.toException()); } }); 

Вы проверили правило настройки проекта вашей базы

Правила Firebase обеспечивают способ идентификации роли пользователя при выполнении операций чтения и записи. Эти правила будут действовать на уровне безопасности на сервере перед выполнением любой операции CRUD. По умолчанию правила позволяют пользователю выполнять операции чтения и записи только после аутентификации.

 The below rules allow authenticated users only to read or write data. { "rules": { ".read": "auth != null", ".write": "auth != null" } } 

Ниже правила позволяют каждому читать и записывать данные без аутентификации.

 { "rules": { ".read": true, ".write": true } } 

Вы также можете использовать эти правила для проверки данных перед вставкой в ​​базу данных. Например, ниже правила проверяют, что имя должно быть менее 50 символов, а email – действительным, используя регулярное выражение электронной почты.

 { "rules": { ".read": true, ".write": true, "users": { "$user": { "name": { ".validate": "newData.isString() && newData.val().length < 50" }, "email": { ".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[AZ]{2,4}$/i)" } } } } } 

Для подробного руководства проверьте эту ссылку