Als ich Realm verwendete und es an Fragment übergeben wollte, implementierte ich Serializable und putSerializable to Bundle, aber es wurde zwangsweise mit onPause beendet. Ich habe herausgefunden, wie man es implementiert, indem ich untersucht habe, ob es überhaupt weitergegeben werden kann. Notieren Sie es sich also. Wenn Sie es nur lösen möchten, lesen Sie die Schlussfolgerung.
public static Fragment newInstance(SampleRealmObject realmObject) {
Bundle args = new Bundle();
args.putParcelable("key", realmObject);
...
}
Zunächst einmal war RealmObject eine Modellklasse, die nichts besonders Kompliziertes tat. Daher dachte ich, wenn ich Serializable implementiere, könnte ich Serializable setzen. Dann habe ich es gut bestanden und die App hat funktioniert, aber ... Wenn Sie den Bildschirm ausschalten oder zum Startbildschirm zurückkehren
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = io.realm.SampleRealmObjectRealmProxy)
Caused by: java.io.NotSerializableException: io.realm.SampleRealmObjectRealmProxy$SapmleRealmObjectColumnInfo
Mir wurde gesagt. Ich fragte mich, ob Serialisieren unmöglich ist, weil Proxy beteiligt ist, und ich fragte mich, ob Parcelable gehen könnte. Entdecken Sie diesen Artikel https://realm.io/jp/docs/java/latest/#parceler Obwohl das Linkziel aufgelistet ist, habe ich die Beschreibung hinzugefügt, die in Realm ehrlich beschrieben wurde, ohne sie zu lesen
compile "org.parceler:parceler-api:1.0.3"
apt "org.parceler:parceler:1.0.3"
Ich habe diesen Artikel gefunden, als ich gesucht habe, weil er nicht gut funktioniert. Http://qiita.com/kazhida/items/affe4488078a2e625d33#%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC % E3% 82% B7% E3% 83% A7% E3% 83% B3% E3% 83% A9% E3% 82% A4% E3% 83% 96% E3% 83% A9% E3% 83% AA Als ich die Beschreibung hinzufügte und sie erstellte, bestand sie, sodass sich ein Fall beruhigte. Ich dachte, eine Warnung wurde angezeigt.
Warning:Using incompatible plugins for the annotation processing: android-apt. This may result in an unexpected behavior.
android-apt ist nicht gut und kann sich unerwartet verhalten. Wann. Wenn Sie dann googeln, finden Sie den folgenden Artikel. https://stackoverflow.com/questions/42632662/android-studio-warning-using-incompatible-plugins-for-the-annotation-processing Wenn Sie die beste Antwort lesen, finden Sie ein Beispiel für Buttermesser. Es heißt "Plugin anwenden: delete'com.neenbedankt.android-apt '" Wenn ich es lösche und ausführe, erhalte ich die Fehlermeldung, dass kein annotationProcessor vorhanden ist. Zum Vergleich: Ich hatte keinen AnnotationProcessor in meinem Code. Vielleicht ist dies auch in Parceler? Ich ging zur Bibliotheksseite und fand sie in gradle, als ich danach suchte. Wenn Sie es schreiben, wird es ohne Vorwarnung abgeschlossen. Die Geschichte, die Realms Beschreibung nicht hätte schlucken dürfen. (Vielleicht gibt es einen guten Weg)
compile 'org.parceler:parceler-api:1.1.9'
annotationProcessor 'org.parceler:parceler:1.1.9'
Klicken Sie hier für Details https://github.com/johncarl81/parceler
@Parcel(implementations = SampleRealmObjectRealmProxy.class,
value = Parcel.Serialization.BEAN,
analyze = SampleRealmObject.class)
public class SampleRealmObject extends RealmObject {
...
}
Klicken Sie hier für Details https://realm.io/jp/docs/java/latest/#parceler
public static Fragment newInstance(SampleRealmObject realmObject) {
Bundle args = new Bundle();
args.putParcelable("key", Parcels.wrap(realmObject));
...
}
//Beim Wiederherstellen auspacken
SampleRealmObject realmObject = Parcels.upwrap(getArguments().getParcelable("key"));
das ist alles!
Recommended Posts