【问题标题】:Retrieve data from Firebase using REST API使用 REST API 从 Firebase 检索数据
【发布时间】:2019-08-26 13:24:36
【问题描述】:

我正在尝试使用 Retrofit 从 firebase 读取以下所有数据。我不想使用 Firebase SDK!我已按以下格式将数据保存到 Firebase:

"xyz@gmail,com": {
    "d1d1b69c-71c9-492a-b4ac-3afaceed0584": {
      "videos": {
         "currentUserEmail":"xyz@gmail.com",
         "dateUploaded":"Aug 26, 2019, 07:15",
         "description":"",
         "id":"d1d1b69c-71c9-492a-b4ac-3afaceed0584",
         "title":"test1",
         "userImage":"",
         "username":"xyz",
         "videoPath":"https://firebasestorage.googleapis.com/aVideoPath..."
   }
},

    "e510e59c-9959-4931-8070-e00ea0e64768": {
       "videos": {
          "currentUserEmail":"some@some.com",
          "dateUploaded":"Aug 26, 2019, 07:16",
          "description":"",
          "id":"e510e59c-9959-4931-8070-e00ea0e64768",
          "title":"test2",
          "userImage":"",
          "username":"someUser",
          "videoPath":"https://firebasestorage.googleapis.com/aVideoPath..."
    }
  }
}

我无法从这个 json 数据创建 POJO,部分原因是唯一 ID。我尝试使用 jsonschema2pojo 生成 POJO,但您可以猜到,POJO 看起来像这样:

    XyzGmailCom {
     @SerializedName("d1d1b69c-71c9-492a-b4ac-3afaceed0584"
     private d1d1b69c-71c9-492a-b4ac-3afaceed0584 d1d1b69c-71c9-492a-b4ac-3afaceed0584;
}

可能我没有使用正确的逻辑来正确保存数据。有人可以指导我如何使用改造从 Firebase 保存和读取此类数据吗?非常感谢您的帮助。谢谢你。

【问题讨论】:

  • 我不认为改造可以做到这一点,因为 Firebase 不使用 RESTful API,甚至可能他们不使用内部的 json 格式。
  • 您使用的是哪个 Firebase 数据库,实时数据库还是 Cloud Firestore?为什么不想使用提供的 SDK?
  • @Doug Stevenson 我正在使用实时数据库。我正在使用 Retrfoit,因为响应比提供的 SDK 快一点,
  • @Spark.Bao 我已经在使用 Retrofit 来保存和读取其他一些场景中的数据。但是,我一直在阅读我正在保存的视频列表。

标签: android firebase rest firebase-realtime-database


【解决方案1】:

好吧,经过各种尝试和错误,我想出了一个解决方案。我正在使用 JsonDeserializer 反序列化 json 对象,然后循环遍历对象以获取键,一旦我进入嵌套对象,我将从 json 对象重新创建 UsersVideoRes 并返回该对象。代码如下:

public class UserVideosAdapterFactory implements JsonDeserializer<UsersVideoRes> {
    private final List<UsersVideo> usersVideoList = new ArrayList<>();
    private UsersVideoRes usersVideoRes = new UsersVideoRes();
    @Override
    public UsersVideoRes deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        Set<String> keys = jsonObject.keySet();
        for (String key : keys) {
            JsonElement jsonElement = jsonObject.get(key);
            JsonObject jsonObject1 = jsonElement.getAsJsonObject();
            Set<String> key1 = jsonObject1.keySet();
            for (String videoKey : key1) {
                UsersVideo usersVideo = new UsersVideo();
                JsonElement videoElement = jsonObject1.get(videoKey);
                JsonObject videoObject = videoElement.getAsJsonObject();
                String id = videoObject.get("id").getAsString();
                String videoPath = videoObject.get("videoPath").getAsString();
                String userImage = videoObject.get("userImage").getAsString();
                String currentUserEmail = videoObject.get("currentUserEmail").getAsString();
                String dateUploaded = videoObject.get("dateUploaded").getAsString();
                String description = videoObject.get("description").getAsString();
                String title = videoObject.get("title").getAsString();
                String username = videoObject.get("username").getAsString();
                usersVideo.setId(id);
                usersVideo.setVideoPath(videoPath);
                usersVideo.setUserImage(userImage);
                usersVideo.setCurrentUserEmail(currentUserEmail);
                usersVideo.setDateUploaded(dateUploaded);
                usersVideo.setDescription(description);
                usersVideo.setTitle(title);
                usersVideo.setUsername(username);
                this.usersVideoList.add(usersVideo);
                usersVideoRes.setUsersVideoList(this.usersVideoList);
            }
        }
        return this.usersVideoRes;
    }

它按我的预期工作,但是,我个人认为这不是一个好的解决方案,可能有更好的方法,所以仍然希望有人能提出更好的解决方案,再次感谢。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多