Android E/Parcel:解组时未找到类(仅在 Samsung Tab3 上)

2024-01-18

我一直无法解决为什么会出现此错误,并且仅在运行 4.4.2 的 Samsung Tab3 设备上出现?当我的 MainActivity 启动另一个 Activity,并在意图中传递一个 Parcelable 类时,就会发生这种情况,如下所示:

    private void debugTest(TestParcel cfgOptions){
        TestParcel cfgOptions = new TestParcel();
        cfgOptions.setValue(15); //just to verify

        Intent intent = new Intent(MainActivity.this, TestActivity.class);
        intent.putExtra("cfgOptions", cfgOptions);
        startActivityForResult(intent, DBG_TEST);
    }

TestActivity 获取可打包数据,如下所示:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_activity);

    TestParcel cfgOptions = getIntent().getExtras().getParcelable("cfgOptions");
}

TestParcel 类:

    import android.os.Parcel;
    import android.os.Parcelable;

    public class TestParcel implements Parcelable {
    private long l_ucs_value = 0;
    private String s_rx_number = "";

    //constructor
    public TestParcel() {
        l_ucs_value = 0;
        s_rx_number = "";
    }

    public void RxNumber(String s) {
        s_rx_number = s;
    }
    public String RxNumber() {
        return s_rx_number;
    }

    //-----------------------------------------------------------------------
    public void setValue(long v){
        l_ucs_value = v;
    }
    public long getValue(){ return l_ucs_value; }


    protected TestParcel(Parcel in) {
        l_ucs_value = in.readLong();
        s_rx_number = in.readString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(l_ucs_value);
        dest.writeString(s_rx_number);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<TestParcel> CREATOR = new Parcelable.Creator<TestParcel>() {
        @Override
        public TestParcel createFromParcel(Parcel in) {
            return new TestParcel(in);
        }

        @Override
        public TestParcel[] newArray(int size) {
            return new TestParcel[size];
        }
    };
}

同样,我只在 Samsung Tab3 设备上看到了这一点 - 但这是我们需要它工作的设备。这是三星 logcat:

02-18 08:05:55.393    2235-2571/? E/Parcel? Class not found when unmarshalling: com.vms.android.VersatileDEX.TestParcel
java.lang.ClassNotFoundException: com.vms.android.VersatileDEX.TestParcel
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:251)
        at java.lang.Class.forName(Class.java:216)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
        at android.os.Parcel.readParcelable(Parcel.java:2097)
        at android.os.Parcel.readValue(Parcel.java:2013)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
        at android.os.Bundle.unparcel(Bundle.java:249)
        at android.os.Bundle.getString(Bundle.java:1118)
        at android.content.Intent.getStringExtra(Intent.java:5148)
        at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)
        at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
        at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4134)
        at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4032)
        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712)
        at android.os.Binder.execTransact(Binder.java:404)
        at dalvik.system.NativeStart.run(Native Method)
 Caused by: java.lang.NoClassDefFoundError: com/vms/android/VersatileDEX/TestParcel
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:251)
        at java.lang.Class.forName(Class.java:216)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
        at android.os.Parcel.readParcelable(Parcel.java:2097)
        at android.os.Parcel.readValue(Parcel.java:2013)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
        at android.os.Bundle.unparcel(Bundle.java:249)
        at android.os.Bundle.getString(Bundle.java:1118)
        at android.content.Intent.getStringExtra(Intent.java:5148)
        at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)
        at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
        at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4134)
        at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4032)
        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712)
        at android.os.Binder.execTransact(Binder.java:404)
        at dalvik.system.NativeStart.run(Native Method)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.vms.android.VersatileDEX.TestParcel" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:251)
        at java.lang.Class.forName(Class.java:216)
        at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
        at android.os.Parcel.readParcelable(Parcel.java:2097)
        at android.os.Parcel.readValue(Parcel.java:2013)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
        at android.os.Bundle.unparcel(Bundle.java:249)
        at android.os.Bundle.getString(Bundle.java:1118)
        at android.content.Intent.getStringExtra(Intent.java:5148)
        at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)
        at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
        at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4134)
        at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4032)
        at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2712)
        at android.os.Binder.execTransact(Binder.java:404)
        at dalvik.system.NativeStart.run(Native Method)

由于某些奇怪的原因,类加载器似乎没有正确设置。

尝试以下其中一项TestActivity.onCreate():


TestParcel cfgOptions = getIntent().getParcelableExtra("cfgOptions");

Intent intent = getIntent();
intent.setExtrasClassLoader(TestParcel.class.getClassLoader());
TestParcel cfgOptions = intent.getParcelableExtra("cfgOptions");

Bundle extras = getIntent().getExtras();
extras.setClassLoader(TestParcel.class.getClassLoader());
TestParcel cfgOptions = extras.getParcelable("cfgOptions");

或者,将可包裹包裹成一个包:

Bundle b = new Bundle();
b.putParcelable("options", cfgOptions);
Intent intent = new Intent(MDex.this, TestActivity.class);
intent.putExtra("bundle", b);

to get:

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

Android E/Parcel:解组时未找到类(仅在 Samsung Tab3 上) 的相关文章

随机推荐

  • 代理后面的 PyQt + QtWebkit

    我正在编写一个 PyQt 功能强大的 Qt 库的 Python 绑定 应用程序 并且我的应用程序的一小部分需要 Web 浏览器 提示 OAuth 所以我开始使用 QtWebkit 顺便说一下 它非常棒 唯一的问题是我想允许代理后面的用户使用
  • C# 通过多级数组仅根据Key名称查找JSON值

    我有各种输入 JSON 格式的数据 它们都包含特定的键名terminalSize 这是我唯一知道的作品 JSON 树的总数或确切深度terminalSizeJSON 树内部将永远是未知的并且可能会发生变化 我正在寻找一个 C 解决方案来循环
  • 添加片段容器视图后 Android 膨胀布局崩溃

    目前我有一个扩展 AppCompatActivity 的自定义抽屉活动 如下所示 public class DrawerActivity extends AppCompatActivity implements NavigationView
  • Eclipse自动补全问题

    刚刚安装了 Eclipse Helios Win7 64 我遇到了一个奇怪的问题 我输入 syso Ctrl Space 预计会完成 System out println 但它不起作用 我在网上搜索了大约一个小时 我将 首选项 gt Jav
  • iPhone 故障保护多个文件下载

    我的应用程序正在从服务器下载图像包 它是来自 XML 的直接链接 20 50 个文件 的数组 如何确保整组图像已完全下载 如果使用 iPhone 按钮关闭应用程序 如何添加条件来取消整个下载 并删除所有已下载的文件 这些方法在 AppDel
  • RestTemplate getForObject 无法映射自定义类

    自定义类结构 DocumentListVO 与 JSON 响应一对一映射 但在使用时DocumentListVO dv1 restTemplate getForObject uri DocumentListVO class 它抛出以下堆栈跟
  • 在模拟器 GenyMotion 上加载 React Native 问题

    我正在使用本机反应 react native cli 2 0 1 react native 0 55 3 我正在通过react native run android 屏幕始终加载应用程序 调试器模式 注意 这是一个突然的问题 直到昨天为止都
  • 如何让 MD5 更安全?或者说真的有必要吗?

    我将用户名和密码存储在 MySQL 数据库中 并使用 MD5 对它们进行哈希处理 然而 我只使用标准的 PHP 函数 没有任何修改 现在 我读到 MD5 已损坏 你做得怎么样 您是否通过不同的哈希机制运行多次或添加某种形式的盐 我很惊讶人们
  • 如何在Bootstrap中保持三列之间的空间?

    我在 Stackoverflow 上做了很多关于如何有效解决这个问题的搜索 但我似乎仍然没有找到我正在寻找的东西 基本上 我有三列 我希望它们在页面上均匀分布并居中 然而 当我为所有三列设置 col md 4 时 最终结果是它们全部三列彼此
  • 使用Python删除目录中的所有文件

    我想删除所有具有扩展名的文件 bak在一个目录中 我怎样才能在Python中做到这一点 Via os listdir https docs python org 2 library os html os listdir and os rem
  • getObjectSummaries 能否获取存储在 S3 存储桶中的对象数量?

    我需要知道存储在下面的文件数量S3桶 现在 ObjectListing没有这样的方法count or numberOfObject 但是 它有一个方法将返回一个列表S3ObjectSummary public java util List
  • Intellij IDEA 不在构面列表中显示 Django

    我使用 Fedora 20 和 OpenJDK 1 7 0 60 设置 我可以成功设置并运行 Intellij IDEA 13 1 然后设置 Python 插件 好吧 当我尝试选择性地使用 Python 模块从 Intellij 生成项目时
  • 如何移动SVG在D3中的位置?

    我使用 D3 创建了一个 svg 然而 它只显示在屏幕的左上角 或者被附加到另一个 svg 中 我可以使用 JavaScript 移动它吗 例如 var svg d3 select body append svg attr width 20
  • 在 Linux 中正常构建的 C++ 程序在 VS2010 中编译失败

    我的 C 项目在 Linux 上构建并运行良好 现在我正在尝试在VS2010中编译它 我似乎从 cmath 库中收到许多错误 如下所示 Error 1 error C2061 syntax error identifier acosf c
  • Labview - 通过数组大小限制增加数组索引

    我正在使用labview XY线图 该图使用随机数生成器生成y值 并使用while循环计数生成x值 当达到阈值 x 值 例如 1000 时 我希望能够迭代过去的 1000 个值并仅每 10 个值显示一次 这具有整理绘图的效果 理想情况下 实
  • 如何在 Rust 中计算 21 的阶乘?

    我需要在我的项目中计算 21 的阶乘 fn factorial num u64 gt u64 match num 0 gt 1 1 gt 1 gt factorial num 1 num fn main let x factorial 21
  • 数组中实际上是空白列?

    我在 Google 表格中使用这个公式 SORT SORT Discord D B2 B Discord D A2 A ARRAYFORMULA IF Discord D G2 G IF Discord D C2 C lt gt Remov
  • 系统.ServiceModel.Web .NET Core

    我正在将 NET Framework 应用程序移植到 NET Core 中 我已通过 NuGet System ServiceModel Web 添加 但似乎不起作用 我需要 WebGet 的替代方案 ServiceContract pub
  • 如何拒绝来自 then 函数内部的承诺

    这可能是一个愚蠢的问题 但是在承诺链中 如何拒绝来自 then 函数之一的承诺 例如 someActionThatReturnsAPromise then function resource return modifyResource re
  • Android E/Parcel:解组时未找到类(仅在 Samsung Tab3 上)

    我一直无法解决为什么会出现此错误 并且仅在运行 4 4 2 的 Samsung Tab3 设备上出现 当我的 MainActivity 启动另一个 Activity 并在意图中传递一个 Parcelable 类时 就会发生这种情况 如下所示