将数据存储到Firebase类Android Studio中

时间:2018-10-16 09:45:32

标签: android firebase firebase-realtime-database

这是我的数据库截图>    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;
    }
}

类Imgs中的变量nums和url表示其中有多少张图片以及图片的网址

我要将dm / store / 7-11的子编号存储到Imgs类的变量num和  dm / store / 7-11 / url的孩子1〜8进入Img变量url

这就是我所做的:

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) {

        }
    });
}

我已经宣布

  

静态公开Imgs imgs;

在OnCreate()上方,我像这样在OnCreate()中调用此getImages函数

  

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 :(得分:0)

尝试

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) {

        }
    });
}