मुझे RealmString और RealmInt का उपयोग करना पसंद नहीं है। जब सूची बदलती है तो उदाहरण के लिए आप उन्हें फिर से हटाने का ट्रैक कैसे रखेंगे?
मैंने दायरे - जीएसओएन (रेट्रोफिट) कोम्बी के लिए एक कस्टम समाधान बनाया है, जहां वे एक ही मॉडल ऑब्जेक्ट साझा करते हैं। मैंने केवल 10 जेसन फाइलों का परीक्षण किया। अगर आपको कोई समस्या आती है तो मुझे बताएं और मैं इसे पूर्णता दूंगा।
/*
* Languages this user selected. Comma separated String.
*/
@SerializedName("languages")
private String languages;
फिर getters और setters इसके लिए बनाने के लिए:
सबसे पहले, एक पूर्णांक [] या String [] अपने RealmObject में के बजाय एक स्ट्रिंग पैदा करते हैं। ध्यान दें कि StringUtils.join()
मेरी अपनी विधि है, यदि आपके द्वारा उपयोग की जाने वाली किसी भी पुस्तकालय में यह नहीं है तो आप इसे नेट पर कहीं भी पा सकते हैं।
/**
* All user languages.
*/
public void setLanguagesFromList(List<String> languages) {
String languagesStr = languages == null ? "" : StringUtils.join(languages, ",");
if (!TextUtils.equals(this.languages, languagesStr)) {
setDirty(true);
}
this.languages = languagesStr;
}
/**
* Returns an unmodifiableList with all user languages.
* <p>
* Use setLanguagesFromList with a new list to make changes.
*
* @return
*/
public List<String> getLanguagesList() {
return Collections.unmodifiableList(
languages == null ? new ArrayList<>() :
Arrays.asList(languages.split(",")));
}
आप इस गेटर बहुत अधिक उपयोग करते हैं, तो आप एक List<String>
कि डेटाबेस (@Ignore) में सहेजा नहीं गया है लेकिन इस विधि तेजी लाने के लिए प्रयोग किया जाता है बनाने चाहता हूँ सकता है (ताकि पार्स केवल परिवर्तन पर किया जाता है/पहली पहुंच)।
फिर GSON/रेट्रोफिट के लिए एक deserializer बनाएँ:
/**
* Used so that string (or any other primitive) arrays are parsed int one String. Realm cannot handle String arrays.
*/
public class RealmPrimitiveArrayDeserializer implements
JsonDeserializer<String> {
private final static String KOMMA = ",";
@Override
public String deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonNull()) {
return null;
}
if (json.isJsonArray()) {
StringBuilder targetStringBuilder = null;
JsonArray stringList = json.getAsJsonArray();
for (JsonElement element : stringList) {
if (element.isJsonPrimitive()) {
if (targetStringBuilder == null) {
targetStringBuilder = new StringBuilder();
}
targetStringBuilder.append(element.getAsString());
targetStringBuilder.append(KOMMA);
}
}
if (targetStringBuilder != null && targetStringBuilder.length() > 0) {
// remove the last komma:
targetStringBuilder.deleteCharAt(targetStringBuilder.length() - 1);
return targetStringBuilder.toString();
}
}
return json.getAsString();
}
}
अपने GSON रेट्रोफिट द्वारा इस्तेमाल किया विन्यास को यह करें:
GsonBuilder gsonBuilder = new GsonBuilder()
.registerTypeAdapter(new TypeToken<String>() {
}.getType(), new RealmPrimitiveArrayDeserializer());
यह है कि। सौभाग्य।
हमें अधिक जानकारी की आवश्यकता है – Coffee
अधिक जानकारी – Brady131313
धन्यवाद !!!!!!!! – Coffee