Comment sérialiser la valeur nulle lors de l'utilisation de l'interface Partagable

En ce qui concerne mon exemple de code, quelle est ma propriété si les variables de Locable sont nulles? Par exemple, maintenant si l.getZoom () renvoie null, j'ai obtenu NullPointerException.

@Override public void writeToParcel(Parcel parcel, int arg1) { parcel.writeInt(count); for(Locable l:locableArr){ parcel.writeInt(l.getOriginId()); parcel.writeInt(l.getLocableType()); parcel.writeInt(l.getZoom()); parcel.writeDouble(l.getLatituda()); parcel.writeDouble(l.getLongituda()); parcel.writeString(l.getTitle()); parcel.writeString(l.getSnipet()); } } 

Merci!

  • Déployez les applications WebGL comme des applications iOS ou Android originales?
  • Type de mime vidéo Android HLS
  • Android Studio Soudainement commencé à afficher incapable de résoudre com.android.support ... 25.0.0 les messages d'erreur et tous mes fichiers java sont erronés maintenant?
  • Comment détruire les anciens fragments dans FragmentStatePagerAdapter
  • Voulez-vous trouver la longueur focale d'abord, puis la distance de face détectée en temps réel en utilisant opencv Android
  • Affichage de l'image YUV dans Android
  • Application Android google maps montrant les tuiles grises et pas la carte!
  • Ajouter une mise en page personnalisée à la barre d'outils
  • Android NDK: AVERTISSEMENT: APP_PLATFORM android-9 est plus grand que Android: minSdkVersion 8
  • Les coordonnées de l'écran Android OpenGL ES 2.0 aux coordonnées mondiales
  • Retard de téléchargement de Firebase Analytics
  • Variété d'erreurs HTTP lors de la communication vers un serveur depuis une application Android
  • 4 Solutions collect form web for “Comment sérialiser la valeur nulle lors de l'utilisation de l'interface Partagable”

    Vous pouvez utiliser Parcel.writeValue pour Parcel.writeValue objet générique avec une valeur nulle.

    La plupart des codes de sérialisation que j'ai vus utilisent soit des indicateurs pour indiquer la présence ou l'absence d'une valeur OU précède la valeur avec un champ de comptage (par exemple, lors de la rédaction de tableaux) où le champ de comptage est mis à zéro si la valeur ne fonctionne pas T existe du tout.

    L'examen du code source des classes centrales Android révèle un code comme celui-ci (de la classe Message):

      if (obj != null) { try { Parcelable p = (Parcelable)obj; dest.writeInt(1); dest.writeParcelable(p, flags); } catch (ClassCastException e) { throw new RuntimeException( "Can't marshal non-Parcelable objects across processes."); } } else { dest.writeInt(0); } 

    Ou ceci (de la classe Intent):

      if (mCategories != null) { out.writeInt(mCategories.size()); for (String category : mCategories) { out.writeString(category); } } else { out.writeInt(0); } 

    Ma suggestion: dans votre code, s'il n'y a pas de différence fonctionnelle entre "zoom == null" et "zoom == 0", alors je déclarerais simplement le zoom comme primitif ( int au lieu d' Integer ) OU l'initialiser à zéro dans le Constructeur et assurez-vous que vous ne le mettez jamais à la valeur nulle (vous pouvez vous garantir qu'il ne sera jamais nul et que vous ne devrez pas ajouter un code spécial pour traiter cela dans vos méthodes de sérialisation / désérialisation).

    C'est la solution pour laquelle je suis venu pour écrire des cordes en toute sécurité:

     private void writeStringToParcel(Parcel p, String s) { p.writeByte((byte)(s != null ? 1 : 0)); p.writeString(s); } private String readStringFromParcel(Parcel p) { boolean isPresent = p.readByte() == 1; return isPresent ? p.readString() : null; } 

    J'utilise une classe Parcelable qui comprend également Boolean champs Integer et Boolean , et ces champs peuvent être nuls.

    J'ai eu du mal à utiliser la méthode générique Parcel.writeValue , en particulier lorsque j'essayais de la relire via Parcel.readValue . J'ai continué à obtenir une exception d'exécution qui a déclaré qu'il ne pouvait pas comprendre le type de l'objet partagé.

    En fin de compte, j'ai pu résoudre le problème en utilisant Parcel.writeSerializable et Parcel.readSerializable avec un type cast, car Integer et Boolean implémentent l'interface Serializable. Les méthodes de lecture et d'écriture gèrent null valeurs null pour vous.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.