将ForeignCollection 转换为ArrayList - ORMLite、Gson 和 Android

2024-05-11

如果我的解释不太清楚,我深表歉意,但如果需要,我会添加并编辑这个问题以使其清晰。

我正在开发一个 Android 应用程序,它通过外部 API 接收数据并使用 ORMLite 在本地存储数据。在本地存储数据并使用 ORMLite 之前,我有一些模型从服务器检索 JSON 并通过以下方式解析它:

Gson gson = new Gson();

String result = ApiClient.httpPost("/user_route");

User user = gson.fromJson(result, User.class);

用户类已定义

public class User {
  int id;
  String name;
  ArrayList<Image> media;
}

和图像类:

public class Image {
  int id;
  int creator_id;
  String url;
}

这是模型和方法的简化表示,但我相信我已经保留了所有相关信息。顺便提一句,media是一个 JSON 对象,其中包含Images.

现在我也尝试将数据存储在本地。为了使用 ORMLite 建立用户和图像之间的关系,您似乎必须使用foreignCollection类和@ForeignCollectionField注释。我不相信Gson可以直接解析JsonmediaUser 类中的字段作为ForeignCollection 对象,所以我认为我需要创建两个字段mediaCollection and media.

使用 ORMLite,User 类现在如下所示:

@DatabaseTable(tableName = "Users")
public class User {
  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField
  String name;

  @ForeignCollectionField
  ForeignCollection<Image> mediaCollection;

  ArrayList<Image> media;
}

ORMLite 的 Image 类如下所示:

@DatabaseTable(tableName = "Images")
public class Image {

  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
  private User user;

  @DatabaseField
  int creator_id;

  @DatabaseField
  String url;

}

应用程序的流程是如何工作的,首先我访问用户的本地数据库。我执行一些逻辑,然后确定是否需要实际访问服务器来“更新”或“刷新”用户数据。

无论数据来自本地还是来自远程服务器,我都需要显示Image在同样的观点下。就目前而言,该 URL 为Image根据数据是本地的还是远程的,存储在不同类型的对象中。我想做的是如果Image存储在一个ForeginCollection对象,将该对象转换为ArrayList然后继续我的代码的其余部分,提取ImageURL 并显示它。

我想有两个问题。

  1. 这是一个好的计划还是我应该编写两种完全独立的方法来提取Image来自数据的 URL,而不是从中转换对象ForeignCollection to ArrayList?

  2. If it is一个好的计划,我该如何转换ForeginCollection to an ArrayList?


这是一个好的计划还是我应该编写两种完全独立的方法从数据中提取图像 URL,而不是将对象从foreignCollection 转换为 ArrayList?

它应该有效。否则我看不出有什么简单的方法可以做到这一点。

几点:

  • 有什么方法可以标记ForeignCollection作为瞬态,因此在通过 JSON 传输时会被忽略?然后你可以使用相同的UserJSON 和 ORMLite 的对象。
  • 某一些hydrate()方法会很好,所以它会从media -> mediaCollection反之亦然。
  • 如果您需要将 JSON 传输的图像加载到外部集合中,那么您应该使用Dao.getEmptyForeignCollect(...) http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/dao/Dao.html#getEmptyForeignCollection%28java.lang.String%29方法。获得集合后,您可以将图像添加到其中,它们将被添加到表格中。

如果这是一个好的计划,我如何将ForeignCollection转换为ArrayList?

这更容易。 AForeignCollection is a Collection。你可以这样做:

media = new ArrayList<Image>(mediaCollection);

So your User.getMedia()方法应该检查null如果是这样,则从mediaCollection field.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将ForeignCollection 转换为ArrayList - ORMLite、Gson 和 Android 的相关文章

随机推荐

  • 用于神经网络模型预测的数据的缺失值

    我目前有大量数据将用于训练预测神经网络 美国主要机场的千兆字节天气数据 我几乎每天都有数据 但有些机场的数据中存在缺失值 例如 机场在 1995 年之前可能不存在 因此在此之前我没有该特定位置的数据 此外 有些还缺少整年 可能跨度为 199
  • Codeigniter 处理大文件时允许的内存大小耗尽

    我发布此内容是为了防止其他人正在寻找相同的解决方案 因为我刚刚在这个废话上浪费了两天时间 我有一个 cron 作业 每天使用一个非常大的文件更新数据库一次 使用以下代码 if handle fopen dirname FILE uncomp
  • 如何缓存单元格并重用每个单元格中嵌入了 avplayers 的集合视图中的单元格?

    基本上我想做的是缓存单元格并让视频继续播放 当用户滚动回到单元格时 视频应该只从播放的位置显示 问题是玩家被移除并且单元格最终出现在随机单元格上 而不是其指定区域 您需要有两个视频才能正常工作 我从这里下载了视频https commonda
  • 平面列表滚动时响应触摸事件的延迟

    我在反应本机应用程序中使用 FlatList 实现了无限滚动 这个列表是一个轮播列表 可以认为是一个很长的列表 当我滚动列表时 列表外部的触摸事件在单击时没有响应 但在 FlatList 滚动完成时响应 我该如何改进这个 这个问题很难回答
  • 停止在列表视图中滚动

    我的活动中有一个列表视图和一个图像按钮 当我单击图像按钮时 我想转到列表中的特定位置 我通过调用列表上的 setSelection intposition 来实现此目的 当用户滑动列表视图然后单击图像按钮时会出现问题 列表将转到指定位置但继
  • Python Tweepy:Twitter Api 说 /users/lookup 不存在

    我正在制作一个研究应用程序 研究具有高权威的 Twitter 用户之间的交互 其中一部分是提取有关用户的信息 我使用 Tweepy for Python 构建了一个应用程序 过去 2 天我一直在提取用户信息 没有出现任何问题 突然提出这样的
  • C# 相当于 PHP 中的 hash_hmac

    使用 NET 和 C 我需要使用 HMAC SHA512 向 PHP 服务器提供完整性字符串 在 C 中使用 Encoding encoding Encoding UTF8 byte keyByte encoding GetBytes ke
  • 在企业代理内的 Windows 中安装 Ruby 2.4.1。 MSYS2更新失败

    我正在使用 ruby 安装程序rubyinstaller 2 4 1 2 x64 exe https rubyinstaller org downloads archives 安装ruby 2 4 1 on windows 10 就成功了并
  • 渲染从 SimpleDocTemplate 构建的 ReportLab pdf

    我有一个 django 应用程序 当前使用用户可以下载的画布生成 pdf 我创建一个 StringIO 缓冲区 执行一些操作 然后发送调用 response write Set up response response HttpRespon
  • 在 PowerPoint 中查找文本并替换为 Excel 单元格中的文本

    我正在尝试查找 PowerPoint 幻灯片中的单词列表并将其替换为 Excel 文件中单元格中的值 我在 PowerPoint 中运行 VBA 但出现此错误 运行时错误 2147024809 80070057 指定的值超出范围 代码似乎停
  • Cassandra Pojo Sink Flink 中的动态表名称

    我是 Apache Flink 的新手 我正在使用 Pojo Sink 将数据加载到 Cassandra 中 现在 我在以下命令的帮助下指定表和键空间名称 Table注解 现在 我想在运行时动态传递表名称和键空间名称 以便可以将数据加载到用
  • 如何结合GetX和build_value的使用?

    我们的应用程序有很多提供商 https pub dev packages provider https pub dev packages provider 使用的代码built value https pub dev packages bu
  • 为什么这个泛型方法要求 T 有一个公共的、无参数的构造函数?

    public void Getrecords ref IList iList T dataItem iList Populate GetList
  • 使用 sed 在文本范围下方插入行

    我有一段文本 其中一些部分由四空格缩进清晰地界定 PERCHANCE he for whom this bell tolls may be so ill as that he knows not it tolls for him and p
  • 使用 Pandas 数据框中的字数统计来删除仅包含一个单词的行

    我有一个包含 2 条记录的数据框 数据 id text 0001 The farmer plants grain 0002 tuna 我想统计一下里面的单词数text该数据框的列并删除只有一个单词的行 我知道如何计算单词数 count da
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • Apache 重写规则可以使用或不使用尾部斜杠

    我正在尝试重定向一系列静态 URL 并且无论尾部斜杠是否存在 我都希望它能够正常工作 foo bar gt tacos foo bar gt tacos 我已经尝试了以下方法以及各种变体 但我总是只得到尾部斜杠存在的匹配项 RewriteR
  • 在键盘快捷键上插入预定义文本

    我经常插入binding pry当我调试我的 ruby 文件时 当我使用 Vim 时 我希望将其自动化 以避免每次都重新输入 我怎样才能做到呢 我想要映射的确切顺序是 插入新行 Insert binding pry到新创建的行 返回正常模式
  • 在 Visual Studio 2010 中标准化行结尾

    我们有多个开发人员在开发一个应用程序 似乎每当一个特定的人在处理一个文件时 其他人在处理该文件时 他们都会得到 以下文件中的行结尾不一致 你想要 标准化行结尾 Visual Studio 中是否有一些选项可供开发人员更改 这样我们就不会一直
  • 将ForeignCollection 转换为ArrayList - ORMLite、Gson 和 Android

    如果我的解释不太清楚 我深表歉意 但如果需要 我会添加并编辑这个问题以使其清晰 我正在开发一个 Android 应用程序 它通过外部 API 接收数据并使用 ORMLite 在本地存储数据 在本地存储数据并使用 ORMLite 之前 我有一