我尝试从json创建或更新一个领域对象。 json在对象中,但所有字段都为null

时间:2015-05-20 07:24:57

标签: android realm

我的代码:

AppCFG appCFG = new AppCFG();

    if(jsonToParse != null) {

        Realm realm = Realm.getInstance(AppController.getInstance());

        appCFG.setOid(ParserJsonMethods.getOid(jsonToParse));

        appCFG.setBaseResourceUrl(jsonToParse.optString(AppCFGContract.BASE_RESOURCE_URL));
        appCFG.setClientName(jsonToParse.optString(AppCFGContract.CLIENT_NAME));
        appCFG.setBucketName(jsonToParse.optString(AppCFGContract.BUCKET_NAME));
        appCFG.setConfigUpdatedOn(StringConvertions.stringDateToMillis(jsonToParse.optString(AppCFGContract.CONFIGURATION_UPDATED_ON)));
        appCFG.setDefaultOutputVideoMaxFps(jsonToParse.optInt(AppCFGContract.DEFAULT_OUTPUT_VIDEO_MAX_FPS));
        appCFG.setLatestPackagePublishedOn(StringConvertions.stringDateToMillis(jsonToParse.optString(AppCFGContract.LATEST_PACKAGE_PUBLISHED_ON)));
        appCFG.setOnboardingPassed(jsonToParse.optBoolean(AppCFGContract.ONBOARDING_PASSED));
        appCFG.setOnboardingUsingPackage(jsonToParse.optString(AppCFGContract.ONBOARDING_USING_PACKAGE));
        appCFG.setPrefferedFootageOID(jsonToParse.optString(AppCFGContract.PREFFERED_FOOTAGE_OID));
        appCFG.setTweaks(jsonToParse.optString(AppCFGContract.TWEAKS));
        appCFG.setUploadUserContent(jsonToParse.optString(AppCFGContract.UPLOAD_USER_CONTENT));
        appCFG = parseMixedScreen(appCFG, jsonToParse);

        realm.beginTransaction();

        realm.copyToRealmOrUpdate(appCFG);

        realm.commitTransaction();

拉取所有结果的结果: All fields empty json attached

所有字段都是空的..但不知何故json附加到对象..我做错了什么?

编辑: 当我在拉出所有结果并打开此结果(图像的结果)之后执行result.getBaseResourceUrl()时,我得到了一个很好的答案:http://blah.blah。但是当我试图从baseResourceUrl =“http://blah.blah”获得领域的结果时,我什么都没有回来......

1 个答案:

答案 0 :(得分:1)

Realm使用零拷贝架构和代理对象。这意味着您的所有数据始终保存在C ++内部存储引擎中,而不是实际复制到Java。这也意味着Realm并没有真正使用Java变量,因此当通过调试器查看它们时它们总是具有未初始化的值(null表示对象,0表示整数,{{1对于字符串)

您可以看到您的对象真的是""。这个代理类的作用是覆盖所有getter和setter,以便用C ++而不是Java来访问数据。因此,如果您使用普通的getter,您可以访问您的数据。代理还会创建一个正确的toString()方法,这就是弹出窗口显示正确输出的原因。