【问题标题】:How to pass a RealmObject by using an intent? [duplicate]如何使用意图传递 RealmObject? [复制]
【发布时间】:2019-06-11 06:26:35
【问题描述】:

我想使用 Intent 传递 RealmObject,我是从 Serilizable 做的,但它抛出 java.lang.ClassCastException: io.realm.RealmResults cannot be cast to java.io.Serializable

// else 方法正在运行并抛出异常 // flag 的值为 1.

  lay_upcoming.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Log.i("flag", String.valueOf(flag));
            Log.i("flag", String.valueOf(img_id));
            Log.i("flag", String.valueOf(flag));

            if (flag == 0) {
                bundle = new Bundle();
                eventFragment = new EventFragment();
                bundle.putSerializable("Data", (Serializable) data2);
                bundle.putSerializable("CustomerData", (Serializable) customerData);
                bundle.putInt("img_id", img_id2);
                eventFragment.setArguments(bundle);

                getFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up).addToBackStack(null).replace(R.id.fragment_container, eventFragment).commit();

            } else {
                bundle = new Bundle();
                eventFragment = new EventFragment();
                bundle.putSerializable("Data", (Serializable) allEventModels);
                bundle.putSerializable("CustomerData", (Serializable) customerDataModels);
                bundle.putInt("img_id", img_id);
                eventFragment.setArguments(bundle);

                getFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up).addToBackStack(null).replace(R.id.fragment_container, eventFragment).commit();

            }
        }
    });

【问题讨论】:

  • 理论上你可以copyFromRealm然后用GSON转换成JSON,然后作为字符串发送。但它会成为一个分离的对象,这可能是也可能不是你需要的。

标签: android realm


【解决方案1】:

您将无法使用意图、parcelables 等传递 Realm 对象。您的解决方案是传递一个标识符并让目标活动查询 Realm 本身并检索该对象。

你没有在问题中包含类定义,所以我不能给你一个完整的答案。但我会假设您定义了主键或其他一些唯一的 id/id 组合,您可以将它们作为字符串或整数传递给意图,然后通过查询检索对象。

【讨论】:

    【解决方案2】:

    如果你想通过意图在两个组件之间传递一个领域对象 你可以利用,

    1. 用于序列化的 Gson 使用 intent.putString() 传递它

    2. 您可以将 Parcelable 实现到您的领域对象并使用 Bundle 传递它

          Intent intent = new Intent();
          Bundle bundle = new Bundle();
          bundle.putParcelable("YOUR_OBJECT_KEY",YOUR_OBJECT);
          intent.putExtras(bundle);
      

      然后像这样检索

      getIntent().getExtras().getParcelable("YOUR_OBJECT_KEY")
      

    【讨论】:

    • Chris Shaw 解决方案在性能和使用方面更好。我不建议按照你的建议去做
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多