Intereting Posts
Отправка сообщения через WhatsApp Получать координаты изображения растрового изображения из ImageView в два раза меньше Добавить фильтр на RecyclerView с карточками? Вызовите 911 на Android Передача списка из одного действия в другое Как загрузить строку html в webview? OnMarkerClick не работает (v2) Мягкая клавиатура появляется только при фокусировке EditText ТОЛЬКО один раз Добавление рамки или границы в ImageView и Drop-Shadow Кто будет показывать больше провайдеров с ACTION_OPEN_DOCUMENT Анимированный фон, напоминающий приложение для будильника Ресурс был получен при подключенной трассировке стека, но не был выпущен. См. Java.io.Closeable для получения информации об избежании утечек ресурсов Анимация пользовательской обратной кнопки ActionBarCompat с Theme.AppCompat.Light.DarkActionBar показывает белый текст заголовка, но текст чернильного прядильника Проблема входа в систему Tumblr для Android «JumblrException: Not Authorized»

Объект Greendao при сериализации с использованием GSON не содержит связанного объекта в строке Generated JSON

У меня есть два объекта, сгенерированные с использованием генератора Greendao. Эти две организации – больница и пациент. Между больницей и пациентом существует взаимосвязь от одного до многих. Таким образом, в одной больнице может быть несколько пациентов, и у одного пациента может быть только одна больница. Таким образом, больница будет содержать список пациентов.

Код для greendao Generator is->

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». Теперь у двух пациентов «Больница 1» в качестве родственной больницы. Patient1.getHospital () вернет объект Hospital1 и patient2.getHospital () также вернет объект Hospital1. Hospital1.getPatient () вернет список пациентов, содержащих объект patient1 и patient2.

Мой код активности ->

 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 не содержит ключа пользователя и соответствующего значения списка, содержащего Patient1 и Patient2.Сгенерированная строка JSON:

 { "Hospital_Name":"Hospital 1", "id":1 } 

Таким образом, созданная строка JSON не содержит всех атрибутов объекта больницы. Как это решить?

Взгляните на отношения Docs: отношения «один» и «многие» разрешаются лениво, при доступе к ним

Для многих отношений, разрешенных при первом доступе (и после сброса)

Так что просто нужно вызвать hospital1.getPatients (); Перед преобразованием объекта в Json.So. После добавления этой строки ваш код будет выглядеть ниже.

 Hospital hospital1 = daoSession1.getHospitalDao().loadByRowId(1); hospital1.getPatients(); Gson gson = new Gson(); Log.e("msg", gson.toJson(hospital1)); 

Я надеюсь, что это решит вашу проблему

Прежде всего, ваш класс Hospital должен иметь параметр списка для хранения объектов пациента. Это может быть ArrayList<Patinet> тогда вам нужно получить список пациентов из базы данных,

 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));