Lorsque j'utilisais Realm et que je voulais le transmettre à Fragment, j'ai implémenté Serializable et putSerializable sur Bundle, et il a été interrompu de force avec onPause. J'ai découvert comment le mettre en œuvre en cherchant à savoir s'il pouvait être adopté en premier lieu, alors prenez-en note. Si vous voulez simplement le résoudre, voyez la conclusion.
public static Fragment newInstance(SampleRealmObject realmObject) {
Bundle args = new Bundle();
args.putParcelable("key", realmObject);
...
}
Tout d'abord, RealmObject était une classe de modèle qui ne faisait rien de particulièrement compliqué, alors j'ai pensé que si j'implémentais Serializable, je pourrais mettreSerializable. Ensuite, je l'ai bien réussi et l'application a fonctionné, mais ... Lorsque vous éteignez l'écran ou revenez à l'écran d'accueil
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = io.realm.SampleRealmObjectRealmProxy)
Caused by: java.io.NotSerializableException: io.realm.SampleRealmObjectRealmProxy$SapmleRealmObjectColumnInfo
On m'a dit. Je me suis demandé si Serialize était impossible parce que Proxy était impliqué, et je me suis demandé si Parcelable pouvait aller. Découvrez cet article https://realm.io/jp/docs/java/latest/#parceler Même si la destination du lien est répertoriée, j'ai ajouté la description qui a été honnêtement décrite dans Realm sans la lire
compile "org.parceler:parceler-api:1.0.3"
apt "org.parceler:parceler:1.0.3"
J'ai trouvé cet article lors de ma recherche car il ne fonctionne pas bien 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 Quand j'ai ajouté la description et l'ai construite, elle a réussi, donc un cas s'est réglé. J'ai pensé, un avertissement a été affiché.
Warning:Using incompatible plugins for the annotation processing: android-apt. This may result in an unexpected behavior.
android-apt n'est pas bon et peut se comporter de manière inattendue. Quand. Ensuite, si vous google, vous trouverez l'article suivant. https://stackoverflow.com/questions/42632662/android-studio-warning-using-incompatible-plugins-for-the-annotation-processing Si vous lisez la meilleure réponse, vous trouverez un exemple de couteau à beurre. Il dit "appliquer le plugin: delete'com.neenbedankt.android-apt '" Lorsque je l'efface et que je l'exécute, j'obtiens une erreur indiquant qu'il n'y a pas d'annotationProcessor. En comparaison, je n'avais pas d'annotationProcessor dans mon code, alors peut-être que c'est aussi dans Parceler? Je suis allé à la page de la bibliothèque et je l'ai trouvé dans gradle lorsque je l'ai cherché. Si vous l'écrivez, il sera complété sans avertissement. L'histoire que la description de Realm n'aurait pas dû être avalée. (Peut-être qu'il y a un bon moyen)
compile 'org.parceler:parceler-api:1.1.9'
annotationProcessor 'org.parceler:parceler:1.1.9'
Cliquez ici pour plus de détails https://github.com/johncarl81/parceler
@Parcel(implementations = SampleRealmObjectRealmProxy.class,
value = Parcel.Serialization.BEAN,
analyze = SampleRealmObject.class)
public class SampleRealmObject extends RealmObject {
...
}
Cliquez ici pour plus de détails https://realm.io/jp/docs/java/latest/#parceler
public static Fragment newInstance(SampleRealmObject realmObject) {
Bundle args = new Bundle();
args.putParcelable("key", Parcels.wrap(realmObject));
...
}
//Déballer lors de la restauration
SampleRealmObject realmObject = Parcels.upwrap(getArguments().getParcelable("key"));
c'est tout!
Recommended Posts