2013-09-02 8 views
6

मेरे पास दो इकाइयां हैं, User और StoreUser में कई Stores (1: एम) संबंध हैं। मैंने कोड का पालन करके स्टोर टेबल में कुछ स्टोर सूची डाली है।दाओएक्सप्शन: एटीआई को डीएओ संदर्भ से अलग किया गया है

public void saveStoresToDatabase(Context context, ArrayList<Store> storeList) { 

    DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "notes-db", null); 
    SQLiteDatabase db = helper.getWritableDatabase(); 
    DaoMaster daoMaster = new DaoMaster(db); 

    DaoSession daoSession = daoMaster.newSession(); 
    StoreDao storeDao = daoSession.getStoreDao(); 

    ArrayList <Store> list = SharedData.getInstance().getUser().getStoreList(); 

    for(int i = 0; i < storeList.size(); i++) { 
     storeList.get(i).setUserIdForStore(SharedData.getInstance().getUser().getId()); 
    } 
    storeDao.insertOrReplaceInTx(storeList); 
    list.addAll(storeList); 
    user.resetStoreList(); 

} 

मैं "इकाई डीएओ संदर्भ से अलग है" अपवाद हो रही है जब भी मैं फोन user.getStoreList() प्रयास करें। daoSessionnull के रूप में स्निप किए गए कोड पर अपवाद होता है।

public ArrayList<Store> getDMStoreListFromDatabase(Context context) { 
    return SharedData.getInstance().getUser().getStoreList(); 
} 

जहां SharedData मेरी सिंगलटन, एक उपयोगकर्ता वस्तु होने:

private SharedData() { 
    user = new User(); 
} 

और मैं इस प्रकार sharedData उदाहरण मिलता है:

public static synchronized SharedData getInstance() { 
    if (sharedObject == null) { 
     sharedObject = new SharedData(); 
    } 
    return sharedObject; 
} 
+0

कृपया उपयोगकर्ता कोड प्राप्त करने के बारे में कुछ कोड प्रदान करें और आप उपयोगकर्ता कहां कॉल करते हैं .getStoreList()। क्या आप सुनिश्चित हैं कि स्टोरलिस्ट आपके डीबी में सही ढंग से डाली गई है? क्या आप सुनिश्चित हैं कि चयनित उपयोगकर्ता के लिए डीबी में स्टोरलिस्ट है? – AlexS

+0

मैंने कुछ कोड डालने से अपना प्रश्न संपादित कर लिया है, हां मुझे यकीन है कि स्टोरलिस्ट डाला गया है, हालांकि मैं लेनदेन में डाल रहा हूं लेकिन मैंने सूची तत्वों को एक-एक करके डालने के द्वारा भी इसकी जांच की है। केवल एक उपयोगकर्ता है इसलिए हाँ मुझे यकीन है कि चयनित उपयोगकर्ता के लिए स्टोरलिस्ट डीबी में है क्योंकि इसे सफलतापूर्वक डाला गया था। क्या डेटाबेस टेबल देखने का कोई तरीका है? –

उत्तर

9

डेटाबेस प्रविष्टियों का प्रतिनिधित्व ऑब्जेक्ट (जैसे User) कर रहे हैं केवल डेटाबेस-सत्र से जुड़ा हुआ है अगर उन्हें डेटाबेस से लाया गया है या पहले डेटाबेस में डाला गया है।

ऐसा लगता है कि आप greendao का उपयोग करके अपने उपयोगकर्ता-ऑब्जेक्ट को लोड नहीं करते हैं, बल्कि इसके बजाय इसे new के साथ बनाएं।

आप दाओ का उपयोग करके इस उपयोगकर्ता-वस्तु को स्टोर नहीं करना चाहते हैं। इस प्रकार उपयोगकर्ता-वस्तु सत्र से जुड़ी नहीं है।

इसके ऊपर आप बस प्रत्येक स्टोर में उपयोगकर्ता आईडी सेट कर रहे हैं। यदि आपने कहीं और उपयोगकर्ता-ऑब्जेक्ट डाला नहीं है तो यह भी त्रुटि का कारण बन सकता है क्योंकि विदेशी-बाधा टूट सकती है (इस पर निर्भर करता है कि कैसे greendao आंतरिक रूप से इसे संभालता है)।

setUserIdForStore() के बजाय setUser() के साथ स्टोर में उपयोगकर्ता-ऑब्जेक्ट जोड़ने का प्रयास करें।

यदि यह काम नहीं करता है तो पहले UserDao का उपयोग करके उपयोगकर्ता-ऑब्जेक्ट को स्टोर या लोड करने का प्रयास करें।

+0

सुझाव "यूज़रडाओ का उपयोग कर पहले उपयोगकर्ता-ऑब्जेक्ट को स्टोर/लोड करें" काम किया। "SetUserIdForStore()" को सेट करने के बारे में, मैं प्रत्येक स्टोर के लिए आईडी सेट करने के लिए ऐसा कर रहा था जिसे मैं डीबी में सम्मिलित करने जा रहा हूं, सर्वर डेटाबेस पर पहले से डाले गए स्टोरों की सूची लौटा सकता है, इसलिए मैं उपयोगकर्ता IdForStore कुंजी को बदल रहा हूं डाउनलोड किए गए स्टोर लॉग इन उपयोगकर्ता के साथ सूची डालें IRReplace को सफल बनाने के लिए, हालांकि, स्टोरलिस्ट को हर बार डुबकी रिकॉर्ड डाला जा रहा है और डीबी में डाला जाता है। क्या आप संभावित कारण बता सकते हैं? –

+0

मुझे आपकी ज़रूरतों को बिल्कुल समझ में नहीं आता है। उपयोगकर्ता के पास कई स्टोर हैं और एक स्टोर एक उपयोगकर्ता से संबंधित है, है ना? यदि आप किसी विशिष्ट उपयोगकर्ता को स्टोर जोड़ना चाहते हैं, तो उपयोगकर्ता को पूरे उपयोगकर्ता-ऑब्जेक्ट का उपयोग करके आईडी को सेट करने का प्रयास करें। आप एक ओआरएम-फ्रेमवर्क का उपयोग कर रहे हैं, इसलिए आईडी के साथ गड़बड़ न करने का प्रयास करें, लेकिन ऑब्जेक्ट्स का उपयोग करें। अन्यथा अजीब व्यवहार हो सकते हैं। – AlexS

संबंधित मुद्दे