Это скриншот моей базы данных> 
У меня есть класс с именем 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*/
/*... */
}
}
Эта работа успешно.