这是我的数据库截图>

我有一个叫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中的变量num& url表示有多少张图片和图片的url。
我要将dm/ store /7-11的子num放入类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*/
/*... */
}
}这项工作很成功。
发布于 2018-10-16 10:30:12
试试这个
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) {
}
});
}https://stackoverflow.com/questions/52832568
复制相似问题