Я пытаюсь получить данные из firebase. Я успешно установил базу данных Firebase, но во время операции получения методы получения возвращают нулевое значение, как получить эту информацию? Объект не равен нулю, но методы получения возвращают значение null.
public class ViewDatabase extends AppCompatActivity {
public FirebaseDatabase firebaseDatabase;
public DatabaseReference databaseReference;
public ListView listView;
public static final String TAG = "ViewDatabase";
//Oncreate
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_database);
listView=findViewById(R.id.list);
firebaseDatabase =FirebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference();
databaseReference.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
showData(dataSnapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
}
//Retriving data
private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array = new ArrayList<String>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
User user = ds.getValue(User.class);
if (user != null) {
Log.i(TAG, "user is not null" );
} else {
Log.i(TAG, "user is null" );
}
if (user.getAddress()!=null){
Log.i(TAG, "address is not null" );
}
else{
Log.i(TAG, "address is null" );
}
array = new ArrayList<String>();
array.add(user.getAddress());
array.add(user.getDate());
array.add(user.getEmail());
array.add(user.getFname());
array.add(user.getGender());
array.add(user.getZone());
array.add(user.getLname());
array.add(user.getPhone());
}
ArrayAdapter adapter = new ArrayAdapter(this, layout.simple_list_item_1, array);
listView.setAdapter(adapter);
}
}
Что я делаю неправильно?
//JSON EXPORT
{"User" : {
"-LIN7aCLwUo7fdjSm5ij" : {
"address" : "jagraon",
"date" : "2018/7/27",
"email" : "[email protected]",
"fname" : "Gurjap",
"id" : "-LIN7aCLwUo7fdjSm5ij",
"lname" : "Singh",
"phone" : "8727050501",
"zone" : "CARDIO ZONE"
},
"-LIN7iFVzA8eVShCSmwu" : {
"address" : "jagraon",
"date" : "2018/7/25",
"email" : "[email protected]",
"fname" : "Gurlivtaran",
"id" : "-LIN7iFVzA8eVShCSmwu",
"lname" : "Singh",
"phone" : "8725000740",
"zone" : "STRENTH ZONE"
},
"-LIjA7Kox5dtN8jg9ywY" : {
"address" : "chuuu",
"date" : "Select Expiry Date",
"email" : "[email protected]",
"fname" : "dhhxc",
"lname" : "cvhh",
"phone" : "9856533565",
"zone" : "CARDIO ZONE"}
} }
ЗДЕСЬ экспорт JSON из firebase.
Измените свой вопрос, включив в него данные JSON (в виде текста, без скриншотов). Вы можете получить его, щелкнув ссылку «Экспорт JSON» в вашем Консоль базы данных Firebase.
Готово, сэр, пожалуйста, проверьте мой код еще раз
@RohitMaurya здесь структура как файл JSON
@FrankvanPuffelen JSON экспортирован
@GurjapSingh Как вы сказали, ваш объект не равен нулю, но геттеры возвращают ноль. Так что же внутри объекта? Как я вижу в коде, ваша ссылка на базу данных не указывает на узел пользователя, вы пробовали использовать мое решение выше? вы можете опубликовать структуру своей базы данных?
Вы читаете с неправильного уровня в своей базе данных.
Вы читаете из корня, а затем перебираете дочерние элементы прямо под ним. Это означает, что вы получаете снимок для /User и пытаетесь прочитать из него User.class. Это не сработает, поскольку в address нет свойств name, /User и т.д. напрямую. Эти свойства находятся на один уровень ниже в вашем JSON, поэтому ваш код также должен будет перебирать отдельных пользователей.
Одно простое исправление:
private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array = new ArrayList<String>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
System.out.println(ds.getKey());
for (DataSnapshot userSnapshot : ds.getChildren()) {
System.out.println(userSnapshot.getKey());
User user = userSnapshot.getValue(User.class);
...
Альтернативой (и, возможно, лучшим решением) может быть только чтение узла /User:
firebaseDatabase =FirebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference();
databaseReference.child("User").addValueEventListener(new ValueEventListener() {
...
Можете ли вы опубликовать структуру своей базы данных? Я думаю, ваша ссылка на базу данных должна быть
databaseReference=firebaseDatabase.getReference().child("User");