[JAVA] Verfahren zum Übergeben von RealmObject an Fragment und zur Verwendung von Parceler

Einführung

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.

Was du machen willst

public static Fragment newInstance(SampleRealmObject realmObject) {
    Bundle args = new Bundle();
    args.putParcelable("key", realmObject);
    ...
}

Weg

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)

Fazit

  1. Beschreibung zu build.gradle der App hinzugefügt
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

  1. Fügen Sie @Parcel zu RealmObject hinzu
@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

  1. Fügen Sie Parcels.wrap hinzu, wenn SieParcelable setzen
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

Verfahren zum Übergeben von RealmObject an Fragment und zur Verwendung von Parceler
Verwendung von StringBurrer und Arrays.toString.
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
So verwenden Sie das Font Awesome-Symbol für ul und li
Verwendung von \ t Escape-Sequenzen, die für Mac und Windows-Java unterschiedlich sind
Verwendung von binding.pry für die Ansichtsdatei
Verwendung von OrientJS und OrientDB zusammen
So richten Sie kapt ein und verwenden es
[Ruby] Wie man Slice für Anfänger benutzt
Verwendung von Teilzeichenfolgen und Substratmethoden
Verwendung von @Builder und @NoArgsConstructor zusammen
(Für Anfänger) [Rails] Zeitsparende Technik! So installieren und verwenden Sie slim
Verwendung von Segmented Control und zu notierenden Punkten
Verwendung der Scope- und Pass-Verarbeitung (Servist)
[Für Super-Anfänger] Verwendung des Autofokus: true
[Java] Verwendung der Kalenderklasse und der Datumsklasse
Überlegen Sie, wie Sie Ionic-Native, Hybrid und HTML5 für die Produktion mobiler Apps verwenden können
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
So verwenden Sie ein Array für den TreeMap-Schlüssel
Verwendung von Truth (Assertion Library für Java / Android)
[Für diejenigen, die Portfolios erstellen] Verwendung von Font-Awesome-Rails
Verwendung und Anwendung der JFrame / Canvas-Klasse von Java
Wie man GitHub für Super-Anfänger benutzt (Teamentwicklung)
Erklärung von Ruby on Rails für Anfänger ④ ~ Informationen zu Benennungsregeln und zur Verwendung von form_Tag ~
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
Verwendung von SAS-Token für Azure Event Hubs (Java)
So verwenden Sie OpenCV 4 unter Android und zeigen die Kamera live an
[Ein Muss für einen Java-Ingenieurlehrling] Verwendung der Stream-API
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse