键 _id 预期为 Parcelable,但值为 java.lang.Long。在 Activity 之间解析 Parcelable 对象时

2023-12-31

我想将自定义类的对象传递给另一个活动。我才知道可分包是一种方式 https://stackoverflow.com/a/2141166/1773155 and WAY http://www.developerphil.com/parcelable-vs-serializable/比可串行化更快。但这样做我得到了例外

Key _id expected Parceable but value was java.lang.Long. The default value <null> was returned.

我不知道我做错了什么。我遵循了这些教程:

  • 在 Android Activity 之间传递自定义对象 http://www.sohailaziz.com/2012/04/passing-custom-objects-between-android.html
  • 还有一个非常流行的 StackOverFlow 答案 https://stackoverflow.com/a/2141166/1773155

我的对象的代码实现Parcelable如下:

public class CourseNote implements Parcelable {

private long id;
private String noteDescription;
private String noteTitle;
private String creationDate;
private String notePic;
private String noteAudio;
private String noteVideo;
private long courseID_FK;

// ---------------------------------------------------------------------------

public CourseNote() {
    super();
}

// ---------------------------------------------------------------------------

public CourseNote(long id, String noteContent, String noteTitle,
        String creationDate, String notePic, String noteAudio,
        String noteVideo, long courseID_FK) {
    super();
    this.id = id;
    this.noteDescription = noteContent;
    this.noteTitle = noteTitle;
    this.creationDate = creationDate;
    this.notePic = notePic;
    this.noteAudio = noteAudio;
    this.noteVideo = noteVideo;
    this.courseID_FK = courseID_FK;
}

// ---------------------------------------------------------------------------

// parcel constructor
public CourseNote(Parcel in) {
    String[] data = new String[8];

    in.readStringArray(data);
    this.id = Long.parseLong(data[0]);
    this.noteDescription = data[1];
    this.noteTitle = data[2];
    this.creationDate = data[3];
    this.notePic = data[4];
    this.noteAudio = data[5];
    this.noteVideo = data[6];
    this.courseID_FK = Long.parseLong(data[7]);

}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeStringArray(new String[] { String.valueOf(this.id),
            this.noteDescription, this.noteTitle, this.creationDate,
            this.notePic, this.noteAudio, this.noteVideo,
            String.valueOf(this.courseID_FK) });

}

public static final Parcelable.Creator<CourseNote> CREATOR = new Creator<CourseNote>() {

    @Override
    public CourseNote[] newArray(int size) {
        // TODO Auto-generated method stub
        return new CourseNote[size];
    }

    @Override
    public CourseNote createFromParcel(Parcel source) {
        // TODO Auto-generated method stub
        return new CourseNote(source);
    }
};

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

// ---------------------------------------------------------------------------

    // I am ignoring setters/getters
}

当用户单击我发送的列表项时Parcelable反对其他活动,我正在这样做onItemClickListner如下(但效果很好):

        getListView().setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long id) {
            long selectedNoteId = id;

            mIntent = new Intent(getActivity(), AddEditNoteActivity.class);

            mCursor = (Cursor) mNoteListAdapter2.getItem(position);

            mTempCourseNote = new CourseNote(
                    id,
                    mCursor.getString(mCursor
                            .getColumnIndex(CourseNote.COL_CONTENT)),
                    mCursor.getString(mCursor
                            .getColumnIndex(CourseNote.COL_TITLE)),
                    String.valueOf(mCursor.getLong(mCursor
                            .getColumnIndex(CourseNote.COL_CREATION_DATE))),
                    "", "", "", mCursor.getLong(mCursor
                            .getColumnIndex(CourseNote.COL_COURSE_ID_FK)));

            mIntent.putExtra("method", "edit");
            mIntent.putExtra(CourseNote._ID, mTempCourseNote);
            mIntent.putExtra(Course._ID, currentCourseID);

            Log.i(StudyManagerDataSource.LOG_TAG, "Going to start activity");
            startActivity(mIntent);

        }
    });

这就是我接收 ParcelAble 对象的方式:

CourseNote mTempCourseNote = (CourseNote) getIntent().getParcelableExtra(
                CourseNote._ID);

问题出在我使用的密钥的数据类型中

mIntent.putExtra(CourseNote._ID, mTempCourseNote);

它的数据类型是long,我已将数据类型更改为string现在问题已经解决了!

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

键 _id 预期为 Parcelable,但值为 java.lang.Long。在 Activity 之间解析 Parcelable 对象时 的相关文章

  • 在应用程序简历中隐藏软键盘

    我有一个 Android 应用程序 使用 Xamarin 用 C 编写 我已将应用程序简化为包含 TextView 和用于横幅广告的 Google admod AdView 的 LinearLayout 我不希望软键盘出现在应用程序中 这不
  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • 在自定义对象中创建时粘性服务不会重新启动

    我有一个具有绑定服务的单例对象 我希望它重新启动 当我从启动器启动应用程序时 单例对象将初始化并绑定到这个现有的服务实例 以下是在单例中创建和绑定服务的代码 public class MyState private static MySta
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • 无法在自定义 AOSP 上安装 Google Play 中的某些应用程序:项目不可用。理由:9

    我在尝试从 Google Play 安装某些应用程序时收到以下错误 LibraryUtils isAvailable not available restriction 9 DocUtils getAvailabilityRestricti
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • Android Webview 图像未加载

    我制作了一个简单的应用程序WebView 但有些图片无法加载 正确 在我的电脑上 错误 在模拟器中 Correct 错误 没有横幅 于是我用Chrome debug进行调试 发现我的代码被改变了 我不添加像noscript or style
  • 在 Android 上按下电源按钮时,如何防止先调用 onDestroy() 再调用 onCreate()

    我正在记录每个 onCreate 和 onDestroy 调用 我发现 一旦我单击 Android 上的电源按钮 以及模拟器上的电源按钮 我的活动中就会拨打电话 gt onDestroy gt onCreate 这会杀死我的游戏 然后立即从
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐