2016-12-13 9 views
12

में संबंधित इकाई नहीं है I Greendao जनरेटर का उपयोग करके उत्पन्न दो इकाइयां हैं। दोनों इकाइयां अस्पताल और रोगी हैं। अस्पताल और रोगी के बीच कई रिश्ते में एक मौजूद है। तो एक अस्पताल में कई रोगी हो सकते हैं और एक रोगी के पास केवल एक अस्पताल हो सकता है। तो एक अस्पताल में रोगियों की एक सूची होगी।जीएसओएन का उपयोग करते हुए क्रमबद्ध होने पर Greendao इकाई में जेनरेटेड JSON स्ट्रिंग

कोड के लिए greendao जेनरेटर है->

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() अस्पताल 1 ऑब्जेक्ट वापस करेगा और patient2.getHospital() अस्पताल 1 ऑब्जेक्ट भी वापस करेगा। अस्पताल 1.getPatient() रोगी 1 और 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 स्ट्रिंग किसी भी patientList कुंजी और युक्त Patient1 और Patient2.The JSON स्ट्रिंग उत्पन्न सूची संबंधित मान शामिल नहीं करता है:

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

तो जनरेट किया गया JSON स्ट्रिंग अस्पताल इकाई की सभी विशेषताओं शामिल नहीं है । इसे कैसे हल करें?

+0

अस्पताल hospital1 = daoSession1.getHospitalDao() loadByRowId (1)। और रोगी रोगी 1 = daoSession1.getPatientDao()। loadByRowId (1); अलग चीजें हैं, ये अपने मॉडल की जानकारी वापस कर देगी। ये उपर्युक्त कोड –

+0

@ उस्मानराणा में कहीं भी एक दूसरे से जुड़े नहीं हैं, उनके बीच कई रिश्तों को परिभाषित किया गया है ... संपत्ति अस्पताल Id = patient.addLongProperty ("hospitalId")। GetProperty(); // रोगी के पास अस्पताल रोगी है .addToOne (अस्पताल, अस्पताल आईडी); // अस्पताल में कई रोगी हैं बहुत सारे अस्पताल टोपी रोगियों = अस्पताल.addToMany (रोगी, अस्पताल आईडी); अस्पताल ToPatients.setName ("रोगी"); –

उत्तर

3

Relations डॉक्स पर एक नज़र डालें: टू-वन और टू-कई संबंध उन्हें

तक पहुँचने पर, lazily हल कर रहे हैं के साथ अनेक संबंध, पहले पहुँच पर हल (और रीसेट के बाद)

तो बस अस्पताल 1.get रोगियों() को कॉल करने की आवश्यकता है; ऑब्जेक्ट को जेसन में परिवर्तित करने से पहले। इसलिए इस लाइन को जोड़ने के बाद आपका कोड नीचे दिखेगा।

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

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

मुझे आशा है कि यह आपकी समस्या

3

सबसे पहले का समाधान होगा, अपने 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)); 
संबंधित मुद्दे