这是我的数据库截图>
我有一个名为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*/
/*... */
}
}
这项工作成功。
答案 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) {
}
});
}