无法将RealmList <t>转换为JSONObject字符串android

时间:2017-04-06 09:59:32

标签: android realm

我有2个活动,我想在点击列表项时将数据从活动1发送到活动2。点击后我可以获取映射到该ListItem的数据,该数据是一种RealmList类型。我使用Gson库将我的模型转换为Json String。如果我的数据是List的类型但我使用RealmList,我可以实现这一点。当我尝试实现以下功能时,我的应用程序会被冻结。

这是我的过滤器型号:

    Filter filter = new Filter();
    filter.setTitle("");
    filter.setId("");
    filter.setCode("");

RealmList就像:

    RealmList<Filter> list = new RealmList<Filter>();

我尝试将上面的列表转换为JSONObject字符串,如下所示:

 new Gson().toJson(filter))

以上直播给我以下错误:

 PID: 12959 Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 4.  Wait queue head age: 5647.8ms.)
                                            Load: 10.67 / 9.63 / 9.38
                                            CPU usage from 1103ms to -6084ms ago:
                                              101% 12959/com.anubavam.creatrix: 98% user + 3.4% kernel / faults: 6335 minor 15 major
                                              44% 832/system_server: 25% user + 18% kernel / faults: 8128 minor 104 major
                                              10% 1623/com.android.phone: 5.5% user + 5.4% kernel / faults: 4275 minor 57 major
                                              3.6% 4304/android.process.media: 1.7% user + 1.9% kernel / faults: 4931 minor 73 major
                                              0% 286/debuggerd: 0% user + 0% kernel / faults: 3205 minor 38 major
                                              5.8% 91/kswapd0: 0% user + 5.8% kernel
                                              5.8% 1272/com.android.systemui: 3.8% user + 1.9% kernel / faults: 2852 minor 39 major
                                              4.5% 302/zygote: 3% user + 1.5% kernel / faults: 11239 minor
                                              3.4% 1580/com.motorola.process.system: 2.3% user + 1.1% kernel / faults: 1881 minor 1 major
                                              3.3% 153/mmcqd/0: 0% user + 3.3% kernel

注意List和ArrayList没有给我任何错误,它的工作文件。但RealmList是问题所在。 我也尝试跟随线,但没有用。

    List<Filter> list = new RealmList<Filter>();

任何人都可以解决这个问题。

3 个答案:

答案 0 :(得分:2)

截至目前,Realm对象不是Serializable,请参阅this answer。这意味着您无法通过Intent将此对象传递给其他活动,也无法使用JSON库将其转换为GSON

但是,您可以通过两种方式在第二项活动中使用模型。

  1. 将此模型的主键传递给Intent,然后传递给第二个 活动使用此密钥从DB再次获取模型。
  2. 您可以使用此Parceler库来序列化 对象并传递给第二个活动。 使用 Parceler 检查this answer

答案 1 :(得分:1)

Realm目前不支持通过Intent传递数据。 可用选项

1)向第二个Activity发送一些唯一ID并在第二个Activity

上重新查询同一个对象

2)同样使用Third party Parceler

您可能还需要添加依赖项

compile "org.parceler:parceler-api:x.x.x"
apt "org.parceler:parceler:x.x.x"

答案 2 :(得分:1)

  

我想在点击列表项时将活动1中的数据发送到活动2。

分配数据和创建非托管/分离的数据副本是对Realm的误用。

通过意图发送数据的主键,并在第二个活动中重新查询对象。

Intent intent = new Intent(this, OtherActvity.class);
intent.putExtra("itemId", listItem.getId());
startActivity(intent);
public class OtherActivity extends AppCompatActivity {
    Realm realm;

    ListItem listItem;

    @Override
    public void onCreate(Bundle bundle) {
        realm = Realm.getDefaultInstance();
        super.onCreate(bundle);
        listItem = realm.where(ListItem.class).equalTo("id", getIntent().getExtras().getString("itemId")).findFirst(); // re-query
        // ...
    }

    @Override
    public void onDestroy() {
        realm.close();
        realm = null;
        super.onDestroy();
    }
}
相关问题