如何通过使用意图传递RealmObject?

时间:2019-06-11 06:26:35

标签: android realm

我想使用Intent传递RealmObject,我正在从Serilizable中进行操作,但是它抛出了java.lang.ClassCastException:io.realm.RealmResults无法转换为java.io.Serializable

// else方法正在运行并引发异常 //标志的值为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();

            }
        }
    });

2 个答案:

答案 0 :(得分:3)

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

您尚未在问题中包含类定义,因此我无法为您提供完整的答案。但是我假设您已经定义了主键,或者可以将其他独特的ID / ID组合作为字符串或整数传递给Intent,然后通过查询来检索对象。

答案 1 :(得分:0)

如果要通过意图在两个组件之间传递领域对象 您可以利用

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

  2. 您可以使工具可打包到您的领域对象,并使用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")