Невозможно передать снимок объекту класса FIREBASE, пытаясь получить все данные от дочернего объекта - PullRequest
0 голосов
/ 24 мая 2018
package com.iko.android.firebase;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.security.PrivateKey;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    public class Lokasi{
        private String wisata1;
        private String wisata2;

        public  Lokasi(){   }

        public Lokasi(String wisata1, String wisata2) {
            this.wisata1 = wisata1;
            this.wisata2 = wisata2;
        }

        public String getWisata1() {
            return wisata1;
        }

        public String getWisata2() {
            return wisata2;
        }

        public void setWisata1(String wisata1) {
            this.wisata1 = wisata1;
        }

        public void setWisata2(String wisata2) {
            this.wisata2 = wisata2;
        }
    }

    ArrayList<Lokasi> list;
    FirebaseDatabase mDatabase;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseDatabase database = FirebaseDatabase.getInstance();

        DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("lokasi");

        ChildEventListener childEventListener = myRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Lokasi value = dataSnapshot.child(s).getValue(Lokasi.class);
//
                Log.d("MyReports", value.getWisata1() + value.getWisata2());
                Log.d("MyReports", dataSnapshot.getValue().toString());

            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

            {


            }


        });

    }
}

Это мой код каждый раз, когда я запускаю его, он ничего не дает мне в LogCat

, но когда я стираю это

  Lokasi value = dataSnapshot.child(s).getValue(Lokasi.class);
//
                Log.d("MyReports", value.getWisata1() + value.getWisata2());

Вывод из

 Log.d("MyReports", dataSnapshot.getValue().toString());

Выходит и дает мне строку

Кажется, что я неправильно делаю передачу передаваемого снимка в Object

public class Lokasi{
        private String wisata1;
        private String wisata2;

        public  Lokasi(){   }

        public Lokasi(String wisata1, String wisata2) {
            this.wisata1 = wisata1;
            this.wisata2 = wisata2;
        }

        public String getWisata1() {
            return wisata1;
        }

        public String getWisata2() {
            return wisata2;
        }

        public void setWisata1(String wisata1) {
            this.wisata1 = wisata1;
        }

        public void setWisata2(String wisata2) {
            this.wisata2 = wisata2;
        }
    }

, вот мой код класса, а это моя структура FireBase

{
  "Reports" : {
    "Random ID" : {
      "wisata1" : "bumijo",
      "wisata2" : "malioboro"
    }
  },
  "desa" : {
    "Deskripsi" : {
      "deskripsi1" : "Tempat Iko Tinggal",
      "deskripsi2" : "Tempat Adel Berada"
    },
    "PemilikHotel1" : "Iko",
    "PemilikHotel2" : "Adel",
    "alamat" : {
      "alamat1" : "Jln Bumijo",
      "alamat2" : "Jln Malioboro"
    },
    "email" : {
      "email1" : "iko@gmail.com",
      "email2" : "adel@gmail.com"
    },
    "fasilHotel1" : {
      "fasilHotel11" : "toilet",
      "fasilHotel12" : "kasur"
    },
    "fasilHotel2" : {
      "fasilHotel21" : "toilet"
    },
    "hotel" : {
      "hotel1" : "Bumijo Residence",
      "hotel2" : "Malioboro Residence"
    },
    "lokasi" : {
      "wisata1" : "Jln Bumijo",
      "wisata2" : "Jln Malioboro"
    },
    "telpon" : {
      "telpon1" : 565619,
      "telpon2" : 454518
    }
  },
  "message" : "Hello, World!"
}

Среда IDE всегда показывает, что value.getWisata1() может выдавать java.lang.NullPointerException

и с ошибкой

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.iko.android.firebase.MainActivity$Lokasi

1 Ответ

0 голосов
/ 26 мая 2018

Проблема в том, что я поместил Class Lokasi в основное действие, чтобы значение не хотело обновить конструктор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...