хранить данные в класс FireBase Android Studio - PullRequest
0 голосов
/ 16 октября 2018

Это скриншот моей базы данных> database

У меня есть класс с именем Imgs

public class Imgs{
    public long nums;      //how many picutres
    public String[] url ;  //the urls of pictures
    public Imgs(){                           //constructor
        this.nums=1;
        this.url = new String[1];
        url[0] = "HELLO";
    }
    public Imgs(long nums){                  //constructor
        this.nums = nums;
        this.url = new String[(int)nums];
    }
    public Imgs(long nums,String[] url){      //constructor
        this.url = url;
        this.nums=nums;
    }

    public void setUrl(String[] url) {         //setter
        this.url = url;
    }

    public void setNums(long nums) {          //setter
        this.nums = nums;
        this.url = new String[(int)this.nums];
    }

    public long getNums() {
        return nums;
    }

    public String[] getUrl() {
        String []a = {"null"};
        if(url!=null)return url;
        else return a;
    }
}

Переменные nums & url в классе Imgs означают, сколько там изображений и URLизображений

Я хочу сохранить дочерние номера dm / store / 7-11 в переменных переменной Imgs класса, а дочерний номер dm / store / 7-11 / url 1 ~ 8 в переменной url класса Img

Это то, что я сделал:

public void getImages(String store){
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("dm/store/"+store);

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()){
                imgs.setNums((long)ds.child("nums").getValue());
                int length = (int)((long)ds.child("nums").getValue());
                System.out.println("length:"+length);
                String [] tempUrl =new String [length];
                for(int i=1;i<length+1;i++){
                    tempUrl[i] = (String)ds.child("url").child(String.valueOf(i)).getValue();
                }
                imgs.setUrl(tempUrl);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

Я объявил

static public Imgs imgs;

над OnCreate () и Iвызывайте эту функцию getImages в OnCreate () следующим образом

getImages ("7-11");

, но я не знаю почему, когда я запускаю программу, logcat показывает ошибку

Попытка вызвать виртуальный метод long java.lang.Long.longValue () для нулевой ссылки на объект

в этой строке

imgs.setNums ((long) ds.child ("nums"). GetValue ());

почему?Я думал, что был прав.

Может кто-нибудь дать мне какой-нибудь совет?Большое спасибо.

Обновление

    DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("dm");
    myRef.child("store").child(store).child("url").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            int i=0;
            for(DataSnapshot ds : dataSnapshot.getChildren()){
                String tempUrl = (String)ds.getValue();
                i++;
                /*Handle tempUrl*/
                /*...          */
            }
        }

Эта работа успешно.

1 Ответ

0 голосов
/ 16 октября 2018

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

public void getImages(String store){
    FirebaseDatabase database = FirebaseDatabase.getInstance();
   // DatabaseReference myRef = database.getReference().child("dm").child("store")child(store);
    DatabaseReference myRef = database.getReference().child("dm").child("store")child(store).child("url");

    String url1,url2,url3,url4,url5,url6,url7,url8;

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

      // String nums = dataSnapshot.child("nums").getValue(String.class);

          //    imgs.setNums((long)nums);

    if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0) {

         Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
        if (map.get("1") != null) {
            url1 = map.get("1").toString();
        }
        if (map.get("2") != null) {
        url2 = map.get("2").toString();
        }
        if (map.get("3") != null) {
            url3 = map.get("3").toString();
        }
        if (map.get("4") != null) {
        url4 = map.get("4").toString();
        }
        if (map.get("5") != null) {
            url5 = map.get("5").toString();
        }
        if (map.get("6") != null) {
        url6 = map.get("6").toString();
        }
        if (map.get("7") != null) {
            url7 = map.get("7").toString();
        }
        if (map.get("8") != null) {
        url8 = map.get("8").toString();
        }

    }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

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