अगर मैं अपने स्पष्टीकरण के साथ स्पष्ट नहीं हूं तो मैं क्षमा चाहता हूं लेकिन अनुरोध किए जाने पर मैं स्पष्टता के लिए इस प्रश्न को जोड़ और संपादित कर दूंगा।विदेशी कोलेक्शन को ArrayList में कनवर्ट करें - ORMLite, Gson और Android
मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं जो बाहरी एपीआई के माध्यम से डेटा प्राप्त करता है और ORMLite का उपयोग करके स्थानीय रूप से डेटा स्टोर करता है। स्थानीय स्तर पर डेटा भंडारण और ORMLite के प्रयोग से पूर्व मैं मॉडल जो सर्वर से JSON लिया गया था और के माध्यम से इसे पार्स:
public class Image {
int id;
int creator_id;
String url;
}
:
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
उपयोगकर्ता वर्ग
public class User {
int id;
String name;
ArrayList<Image> media;
}
और छवि वर्ग परिभाषित किया गया था
यह मॉडल और विधियों का सरलीकृत प्रतिनिधित्व है लेकिन मेरा मानना है कि मैंने सभी प्रासंगिक जानकारी रखी हैं। बीटीडब्ल्यू, media
एक JSON ऑब्जेक्ट है जिसमें Images
है।
अब मैं स्थानीय रूप से डेटा स्टोर करने की कोशिश कर रहा हूं। ORMLite का उपयोग कर उपयोगकर्ताओं और छवियों के बीच संबंध बनाने के लिए ऐसा लगता है कि आपको विदेशी कोलेक्शन क्लास और @ForeignCollectionField एनोटेशन को नियोजित करना होगा। मुझे विश्वास नहीं है कि जीसन सीधे उपयोगकर्ता वर्ग में media
फ़ील्ड के लिए जेसन को विदेशी वर्गीकरण ऑब्जेक्ट के रूप में पार्स कर सकता है, इसलिए मैंने सोचा कि मुझे दो फ़ील्ड mediaCollection
और media
बनाने की आवश्यकता है।
अब उपयोगकर्ता वर्ग ORMLite का उपयोग करते हुए इस तरह दिखता है:
@DatabaseTable(tableName = "Images")
public class Image {
@DatabaseField(generatedId = true)
int id;
@DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
private User user;
@DatabaseField
int creator_id;
@DatabaseField
String url;
}
कैसे एप्लिकेशन के प्रवाह से काम करता है पहले मैं स्थानीय मारा है:
@DatabaseTable(tableName = "Users")
public class User {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@ForeignCollectionField
ForeignCollection<Image> mediaCollection;
ArrayList<Image> media;
}
ORMLite साथ छवि वर्ग इस तरह दिखता है उपयोगकर्ता के लिए डेटाबेस। मैं कुछ तर्क करता हूं जो तब निर्धारित करता है कि मुझे वास्तव में सर्वर को 'अपडेट' या 'रीफ्रेश' करने के लिए सर्वर को हिट करने की आवश्यकता है या नहीं।
चाहे डेटा स्थानीय रूप से या दूरस्थ सर्वर से आता है, मुझे उसी दृश्य में Image
प्रदर्शित करने की आवश्यकता है। जैसा कि यह अभी खड़ा है, Image
के लिए यूआरएल विभिन्न प्रकार की वस्तुओं में संग्रहीत है, इस पर निर्भर करता है कि डेटा स्थानीय या दूरस्थ है या नहीं। मैं क्या करना चाहता हूं कि Image
ForeginCollection
ऑब्जेक्ट में संग्रहीत है, उस ऑब्जेक्ट को ArrayList
में परिवर्तित करें और फिर मेरे शेष कोड के साथ आगे बढ़ें जो Image
यूआरएल निकालता है और इसे प्रदर्शित करता है।
मुझे लगता है कि दो प्रश्न हैं।
यह एक अच्छी योजना है या मैं डेटा से
Image
यूआरएल निकालने,ArrayList
करने के लिएForeignCollection
से वस्तु परिवर्तित नहीं की दो पूरी तरह से अलग हो लिखना चाहिए?यदि यह एक अच्छी योजना है, मैं कैसे एक
ForeginCollection
एकArrayList
को परिवर्तित?
किसी अन्य संबंधित थ्रेड में उत्तर देखें: http://stackoverflow.com/a/31598771/3495371 –