首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GSON序列化时Greendao实体不包含生成的JSON字符串中的相关实体

使用GSON序列化时Greendao实体不包含生成的JSON字符串中的相关实体
EN

Stack Overflow用户
提问于 2016-12-13 02:07:19
回答 2查看 1.2K关注 0票数 13

我有两个使用Greendao生成器生成的实体。这两个实体是医院和病人。医院与病人之间存在着一对多的关系。因此,一个医院可以有多个病人,而一个病人只能有一个医院。所以医院里会有一份病人名单。

绿岛发电机代码是->

代码语言:javascript
复制
package com.myapp.generator;


import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Property;
import org.greenrobot.greendao.generator.Schema;
import org.greenrobot.greendao.generator.ToMany;



public class MyClass {
    public static void main(String[] args) throws Exception {
        Schema schema = new Schema(1, "com.example.mohit.greendaotest.db");
        Entity hospital = schema.addEntity("Hospital");
        hospital.addIdProperty().autoincrement();
        hospital.addStringProperty("Hospital_Name");

        Entity patient=schema.addEntity("Patient");
        patient.addIdProperty().autoincrement();
        patient.addStringProperty("Patient_Name");

        Property hospitalId = patient.addLongProperty("hospitalId").getProperty();

        // patient has a one assigned hospital
        patient.addToOne(hospital, hospitalId);

        // hospital has many patients
        ToMany hospitalToPatients = hospital.addToMany(patient, hospitalId);
        hospitalToPatients.setName("patients");



        DaoGenerator dg=new DaoGenerator();
        dg.generateAll(schema,"./app/src/main/java");



    }

}

因此,在我的主要活动中,我创建了一个名为“医院1”的医院对象,以及两个名为“病人1”和“患者2”的病人对象。现在两位病人都有“第一医院”作为他们的相关医院。Patent1.getHospital()将返回Hospital1对象,patent2.getHospital()也将返回Hospital1对象。containing ()将返回包含patient1和patient2对象的病人列表。

我的活动代码是->

代码语言:javascript
复制
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;


import com.google.gson.Gson;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "lease-db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession();

        Hospital hospital = new Hospital();
        hospital.setHospital_Name("Hospital 1");

        long hospital_id = daoSession.getHospitalDao().insert(hospital);

        Patient patient1 = new Patient();
        patient1.setPatient_Name("Patient 1");

        Patient patient2 = new Patient();
        patient2.setPatient_Name("Patient 2");


        patient1.setHospitalId(hospital_id);

        patient2.setHospitalId(hospital_id);

        /*patient1.setHospital(hospital);
        patient2.setHospital(hospital);*/

        daoSession.getPatientDao().insert(patient1);
        daoSession.getPatientDao().insert(patient2);


       /* daoSession.getHospitalDao().load(hospital_id).getPatients().add(patient1);
        daoSession.getHospitalDao().load(hospital_id).getPatients().add(patient2);

        daoSession.getHospitalDao().update(daoSession.getHospitalDao().load(hospital_id));*/


        daoSession.clear();

        DaoSession daoSession1 = daoMaster.newSession();

        Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1);


        Gson gson = new Gson();
        Log.e("msg", gson.toJson(hospital1));





        /*Toast.makeText(this,String.valueOf(daoSession1.getPatientDao().loadAll().size()),Toast.LENGTH_SHORT).show();
*/


    }
}

但是,当我从数据库中检索Hospital1对象并使用GSON检索它时。生成的JSON字符串不包含包含patientList和Patient1 2的任何Patient1键和相应的List值。生成的JSON字符串是:

代码语言:javascript
复制
{
            "Hospital_Name":"Hospital 1", "id":1
}

因此,生成的JSON字符串并不包含Hospital实体的所有属性。如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-23 17:13:49

查看一下关系文档:一对一和多个关系在访问它们时被懒散地解决了。

许多关系,在第一次访问(和重置后)就解决了。

因此,在添加这行代码之后,只需调用hospital1.getPatients();,然后将对象转换为Json.So,代码如下所示。

代码语言:javascript
复制
Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1);
hospital1.getPatients();

Gson gson = new Gson();
Log.e("msg", gson.toJson(hospital1));

我希望它能解决你的问题

票数 4
EN

Stack Overflow用户

发布于 2016-12-23 17:33:46

首先,您的Hospital类需要有一个list参数才能保存order对象。它可以是ArrayList<Patinet>,然后你需要从数据库中得到病人的名单,

代码语言:javascript
复制
Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1);

//This block can change according to your design
ArrayList<Patient> patinets = daoSession.getPatientDao().getPatients(hospital1.getId());

hospital1.setPatinets(patinets);
Gson gson = new Gson();
Log.e("msg", gson.toJson(hospital1));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41112680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档