Ich mag es nicht, RealmString und RealmInt zu verwenden. Wie behalten Sie zum Beispiel das Löschen bei, wenn sich die Liste ändert?
Ich habe eine benutzerdefinierte Lösung für den Reich - GSON (Retrofit) Kombi, wo sie das gleiche Modellobjekt teilen. Ich habe nur 10 JSON-Dateien getestet. Lassen Sie mich wissen, wenn Sie irgendwelche Probleme finden, und ich werde das perfektionieren.
Zunächst erstellen String anstelle eines int [] oder String [] in Ihrer RealmObject:
/*
* Languages this user selected. Comma separated String.
*/
@SerializedName("languages")
private String languages;
Dann Getter und Setter für sie erstellen. Beachten Sie, dass StringUtils.join()
meine eigene Methode ist, wenn keine der Bibliotheken, die Sie verwenden, es hat, dann können Sie es überall im Netz finden.
/**
* 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(",")));
}
Wenn Sie diese Getter viel verwenden, können Sie wollen eine List<String>
erstellen, die nicht in der Datenbank (@Ignore) gespeichert wird, sondern verwendet wird, um dieses Verfahren zu beschleunigen (so dass das Parsen nur auf Änderungen erfolgt/erster Zugang).
Erstellen Sie dann ein Deserializer für Gson/Retrofit:
/**
* 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();
}
}
Fügen Sie diese Konfiguration zu Ihrem Gson durch Retrofit verwendet:
GsonBuilder gsonBuilder = new GsonBuilder()
.registerTypeAdapter(new TypeToken<String>() {
}.getType(), new RealmPrimitiveArrayDeserializer());
Das ist es. Viel Glück.
Wir brauchen mehr Detail hier – Coffee
hinzugefügt mehr Details – Brady131313
danke !!!!!!!! – Coffee