При получении данных из firebase геттеры возвращаются null

Я пытаюсь получить данные из 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.

Можете ли вы опубликовать структуру своей базы данных? Я думаю, ваша ссылка на базу данных должна быть databaseReference=firebaseDatabase.getReference().child("Use‌​r");

Rohit Maurya 27.07.2018 11:24

Измените свой вопрос, включив в него данные JSON (в виде текста, без скриншотов). Вы можете получить его, щелкнув ссылку «Экспорт JSON» в вашем Консоль базы данных Firebase.

Frank van Puffelen 27.07.2018 15:33

Готово, сэр, пожалуйста, проверьте мой код еще раз

Gurjap Singh 31.07.2018 09:49

@RohitMaurya здесь структура как файл JSON

Gurjap Singh 01.08.2018 10:26

@FrankvanPuffelen JSON экспортирован

Gurjap Singh 01.08.2018 10:27

@GurjapSingh Как вы сказали, ваш объект не равен нулю, но геттеры возвращают ноль. Так что же внутри объекта? Как я вижу в коде, ваша ссылка на базу данных не указывает на узел пользователя, вы пробовали использовать мое решение выше? вы можете опубликовать структуру своей базы данных?

Rohit Maurya 01.08.2018 11:28
1
6
113
1

Ответы 1

Вы читаете с неправильного уровня в своей базе данных.

Вы читаете из корня, а затем перебираете дочерние элементы прямо под ним. Это означает, что вы получаете снимок для /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() {
    ...

Другие вопросы по теме