实现包含其他 Parcelable 的 Parcelable 时出现问题

2023-11-26

我正在实现 Parcelable 类,其中有另一个 Parcelable 。

在 OuterParcelable 类中:

@Override
public void writeToParcel(Parcel dest, int flags) {
    Bundle tmp = new Bundle();

    tmp.putParcelable("innerParcelable", mParcelable);
    dest.writeBundle(tmp);

进而:

public OuterParcelable(Parcel parcel) {
    super();

    Bundle b = parcel.readBundle();
    mParcelable = b.getParcelable("innerParcelable");

and:

    public OuterParcelable createFromParcel(Parcel in) {
        return new OuterParcelable(in);
    }

当我使用上面的代码重新创建对象时,我得到:

 08-18 17:13:08.566: ERROR/AndroidRuntime(15520): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: my.package.InnerParcelable

一种将非原始属性存储为可分割(可能为 null)值的简洁方法。使用包裹.writeValue() and 读取值()。请参阅下面代码中的注释:

public class MyParcelableClass implements Parcelable {
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeValue(getIntegerAttribute()); // getIntegerAttribute() returns Integer
        dest.writeValue(getDoubleAttribute());
        dest.writeValue(getMyEnumAttribute()); // getMyEnumAttribute() returns a user defined enum
        dest.wrtieValue(getUserClassAttribute()); //UserClass must implement Parcelable in a similar fashion
    }

    private MyParcelableClass(Parcel in) {
        setIntegerAttribute((Integer)in.readValue(null)); //pass null to use default class loader. Ok for Integer, String, etc.
        setDoubleAttribute((Double)in.readValue(null)); //Cast to your specific attribute type
        setEnumAttribute((MyEnum)in.readValue(null));
        setUserClassAttribute((UserClass)in.readValue(UserClass.class.getClassLoader())); //Use specific class loader
    }

    @Override
    public int describeContents() ...

    public static final Parcelable.Creator<ParcelableLocationBean> CREATOR ...    
}

奇迹般有效。 writeValue() 和 readValue() 封装了处理可能的空值和类型检测。来自javadoc:

公共最终无效writeValue(对象v)
展平通用对象 放入一个包裹中。给定的对象值当前可能是以下之一 以下类型:
空值、字符串、整数、...
细绳[], 布尔值[], ...
任何实现 Parcelable 协议的对象。 ...

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

实现包含其他 Parcelable 的 Parcelable 时出现问题 的相关文章

  • 带身份验证的 MediaPlayer RTSP 视频流

    我能够在未经授权的情况下从网络摄像机流式传输视频 但现在我需要在授权的情况下执行此操作 我发现很少有信息表明 Android 不支持 RTSP 身份验证 但我发现另一条信息表明 通过使用该方法添加标头 可以在 API 级别 14 中实现身份
  • Spring Tool Suite/Gradle/MapStruct - 找不到映射器的实现

    我在 StackOverflow 上搜索了我的问题的答案 虽然我找到了许多提供的解决方案 但没有一个适合我的情况 我必须在工作项目中使用 MapStruct 所以我正在尝试通过教程点 https www tutorialspoint com
  • 如何捕获 Runnable 中的封闭范围

    我正在尝试对 a 进行一系列更新HandlerThread使用下面的类 但我有几个关于变量捕获在 Java 中如何工作的问题 1 Is ret通过引用从封闭范围捕获 2 Does this参考Runnable 或者是从封闭范围捕获的 bon
  • 读取 Android 4.2 中的 APN?

    我有个问题阅读 APN在安卓v4 2中 是读 不是写APNS 它抛出一个安全异常 没有写入 APN 设置的权限 用户 10068 和当前用户都没有权限 进程有 android permission WRITE APN SETTINGS 相同
  • android studio更新到3.0后任务执行失败

    当我更新 Android Studio 3 0 时 出现错误 unable to merge with dex 然后我添加了mutiDexEnabled true并且还添加了com android support multidex 1 0
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android物理引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在研究了 3D 游戏编程之后 很快就明白了为什么物理引擎非常有用 Android 支持哪些物理引擎并且可以在 Android 上使用 关于
  • Firebase 云消息传递 - 如何验证令牌?

    我正在使用 Firebase Cloud Messaging FCM 并且每次在客户设备上生成新令牌时 都会根据下面的缩写代码 我将此新令牌发送到我的服务器数据库 云 并将其保存在其中 以便能够发送未来推送通知使用 CFM API 从服务器
  • 获取包含位图支持的画布的 Android 视图上的点的像素颜色值

    我正在尝试找出获取给定点上像素颜色值的最佳方法View http developer android com reference android view View html 我可以通过三种方式写入视图 我设置了背景图像View setBa
  • Android Studio 停留在构建 gradle 项目信息上

    我正在使用 Android Studio 2 3 每当我尝试创建一个新项目或打开某个项目时 它都会卡在此时 正在构建 Gradle 项目信息 请建议我一些解决方案 它可能正在下载 Gradle zip 文件 e g Users user g
  • 在一个react-native项目中使用谷歌地图和FCM

    I want to use google map and FCM in one react native project first I added FCM in project everything was okay but when I
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 可下载字体例外

    我决定使用可下载字体 https developer android com guide topics ui look and feel downloadable fonts html在我的项目中 IS 按照指南中的建议实施了所有内容 当我
  • 应用程序运行时相对布局中的元素显示不同

    我有一个ListView在片段内创建 并且它有一个搜索过滤器 问题是 XML 布局在 android studio 中显示正常 但在模拟器或手机中运行时 它显示不同 与我对齐时不正确 并且当我单击SearchView它位于选项卡导航下方 谁
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站
  • 安卓独立包

    我有一个很大的 UI 大约 20 25 个屏幕 我应该如何组织我的代码 我应该按功能分成不同的包吗 我是否应该为所有 UI 类创建一个包 然后创建子包进行组织 或者我不应该创建单独的包并组织到文件夹中 任何帮助将不胜感激 当您创建文件夹时
  • 如何在 Android 中不使用 Intent 裁剪图像

    我正在尝试裁剪图像我使用了下面的代码 意图 i new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI i pu
  • 使用Android Camera API,拍摄照片的方向始终未定义

    我使用相机API 拍摄的照片总是旋转90度 我想旋转它 所以首先我想知道图片的方向 这一点我被卡住了 我总是以两种方式得到未定义的方向 这是代码 Override public void onPictureTaken byte data C
  • 如何在 Android 的应用程序中使用 LDAP 身份验证?

    我想在我们的应用程序中添加 LDAP 身份验证 我在 Github 上搜索并找到了两个应用程序 但它们无法连接到服务器 通过ldap连接服务器的必要条件是什么 查看 UnboundID SDK 他们有一个适用于 Android 的套件 该应
  • Android:在surfaceview上实现admob

    我有一个使用 SurfaceView 的小游戏形式的活动 下面是代码片段 我很困惑如何在 SurfaceView 上实现 admob 请建议 public class DroidzActivity extends Activity priv

随机推荐

  • 如何将 C# 代码编译为库而不是可执行文件?

    我在 Visual Studio 2010 中有一个 C 控制台应用程序 它有一个 Main 方法以及一堆实用程序类 我希望这些实用程序类可用于其他解决方案 从网上阅读看来我需要将其编译为类库 DLL 这就是我所做的 进入 Visual S
  • Laravel JSON 响应不带反斜杠

    我正在使用 AJAX 将数据发送到我的控制器 PHP代码 return response gt json request gt root summer uploads store 它返回 http domain test summer up
  • 为什么我无法使用 JQuery .html 添加

    为什么这段代码有效 div error container html div class error No more foo allowed div 但这段代码会导致错误 div error container html div class
  • Log4j2:SMTPAppender 不发送错误或致命级别的邮件

    我发现 log4j2 中的 SMTPAppender 有一些问题 每当记录具有以下级别的事件时error or fatal被创建without举办具有级别的活动info在没有邮件发送并且致命事件消失之前 这是我的 log4j2 配置文件 l
  • 如何将这些 SQL SELECT 查询合并到一个 SELECT 语句中

    如何将这两个 select 语句合并到一个查询中 SELECT SUM incidents AS fires neighborhoods AS fire neighborhoods FROM SELECT FROM fires 2009 i
  • `RefCell` 无法在线程之间安全共享?

    这是一个延续如何在 Rust 的闭包内重用外部作用域的值 为了更好的呈现 开通了新的Q main rs The value will be modified eventually inside main and a http request
  • CSS 响应式左浮动和右浮动(更改哪个 div 位于顶部)?

    我正在这个页面上工作 http www insidemarketblog com test 4 您会看到单词 test 位于左侧浮动的 div 中 图像位于右侧浮动的 div 中 如果调整它的大小 您会看到左浮动的 div 位于顶部 右浮动
  • 打开一个新的弹出窗口并向其发布数据

    我正在使用 jQuery 打开一个弹出窗口 我想在它打开时使用 post 方法向其发送数据 任何人都可以帮助我 提前致谢 我目前正在使用 get 方法传递数据 因此数据是 url 中的一部分 但我不希望数据在 url 中可见 functio
  • 在哪里可以找到 TensorFlow 2.0 的tensorflow.contrib.layers

    我一直在 TensorFlow 中开发机器学习代码contrib layers 我对这个模块很满意 它工作得很好 让我能够充分控制我的模型 然而 TensorFlow 2 0将完全删除contrib模块和新的keras模块在没有额外努力的情
  • 以编程方式获取页面的屏幕截图

    我正在编写一个供内部使用的专用爬虫和解析器 并且我需要能够截取网页的屏幕截图 以便检查整个过程中使用的颜色 该程序将接收大约十个网址并将它们保存为位图图像 从那里我计划使用 LockBits 来创建图像中最常用的五种颜色的列表 据我所知 这
  • 使用分页查看目录中的文件 - php

    我想在浏览器中显示我的目录中的文件 我知道这可以使用 opendir and readdir 但我想要的是将列表中的文件数量限制为特定数量并使用分页显示下一个 你可以使用scandir将目录的所有内容读入数组 然后根据分页值输出数组的内容
  • isInstance 和 isInstanceOf 之间的区别

    之间有区别吗classOf String isInstance 42 and 42 isInstanceOf String 如果是 你能解释一下吗 对于引用类型 那些扩展AnyRef 最终结果没有区别 isInstanceOf然而 我们非常
  • KafkaStreams:获取窗口最终结果

    是否可以得到窗口最终结果在 Kafka Streams 中通过抑制中间结果 我无法实现这个目标 我的代码有什么问题吗 val builder StreamsBuilder builder stream
  • 导入 CSV 文件时如何删除文本周围的双引号?

    我有类似于以下内容的数据 D STEIN DS 01 ALTRES TTTTTTFFTT D STEIN DS 01 APCASH TTTTTTFFTT D STEIN DS 01 APINH TTTTTTFFTT D STEIN DS 0
  • 使用 java nio 路径时未安装 JBoss wildfly 8.x 提供程序“vfs”

    我正在尝试将 spring 应用程序从 glassfish 4 导出到 JBoss wildfly 8 x 或 9 alpha 但是当我的应用程序在代码的某些部分启动时会引发异常 Caused by java lang RuntimeExc
  • e.srcElement 在 Firefox 中未定义?

    我正在开发一个网站 现在正在所有浏览器中进行测试 我目前正在 firefox 中进行测试 并且在使用 event sourceElement 时发现错误 我需要 e srcElement 做的是返回值 下面我展示了一个关于如何获取返回的值
  • 关于太多开放数字的警告

    在我创建许多人物的脚本中fix ax plt subplots 我收到警告运行时警告 已打开超过 20 个数字 通过 pyplot 接口创建的图形 matplotlib pyplot figure 会保留到显式关闭为止 并且可能会消耗太多内
  • 在 Web api 控制器中手动验证模型

    我有一个名为 用户 的类和一个属性 名称 public class User Required public string Name get set api控制器方法是 public IHttpActionResult PostUser U
  • @PathVariable 和 @ModelAttribute 的值重叠

    我有一个User存储在会话中的对象 SessionAttributes 以及一个直接的方法装饰 ModelAttribute以便在会话值为空时初始化它 用户类别 Entity Table name USER public class Use
  • 实现包含其他 Parcelable 的 Parcelable 时出现问题

    我正在实现 Parcelable 类 其中有另一个 Parcelable 在 OuterParcelable 类中 Override public void writeToParcel Parcel dest int flags Bundl