来自firebase的android ..return list对象

时间:2017-07-31 17:52:18

标签: android firebase firebase-realtime-database

我正在尝试从firebase实时数据库中获取Item对象。每个工作正常但图像列表返回null。

1 个答案:

答案 0 :(得分:0)

假设您有一些包含以下数据成员的类项目

public class Item {

    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("images")
    @Expose
    private List<String> images;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getImages() {
        return images;
    }

    public void setImages(List<String> images) {
        this.images = images;
    }

}

现在您正在使用此类进行firebase映射和上传。 让我们将Item类成员上传为键值对。

mDatabase.push().setValue(getItemReady(), new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
        if (databaseError == null) {
            makeToast("One entry created successfully");
        } else {
            //data creation failed, handle it here
        }
    }
});

private Item getItemReady() {
    List<String> images = new ArrayList<>();
    images.add("https://i.stack.imgur.com/TWkC2.png");
    Item mItem = new Item();
    mItem.setName("mutee aljabri");
    mItem.setImages(images);
    return mItem;
}

上面的调用会将POJO映射到json,就像在firebase下面一样。

{
  "name":"mutee aljabri",
  "images" 
    "0":"https://i.stack.imgur.com/TWkC2.png"
}

如果这是真的那么我们正在做对,所以现在让我们根据请求在客户端解析它。

private void getDataFirebase() {
    //get fresh data here
    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "load items : onDataChanged() " + dataSnapshot.getKey());
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                //here it will parse every Item you have pushed to firebase
                Item item = snapshot.getValue(Item.class);
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting data failed, log a message
            Log.d(TAG, "load events : onCancelled", databaseError.toException());
        }
    };
    mDatabase.addListenerForSingleValueEvent(listener);
}

我希望你能够接近我正在做的事情。