2016-09-13 1 views
0

Je suis assez nouveau avec Xamarin et j'essaie de créer une application pour Android/iOS. J'essaie d'envoyer une classe avec un putExtra, donc j'ai essayé de rendre la classe Serializable en ajoutant l'interface ISerializable, mais chaque fois que j'essaye de le faire, j'ai besoin d'implémenter une méthode Handle() et Dispose(). Je ne suis pas sûr de savoir quoi faire avec ces méthodes, donc ils ont une exception NotImplemented.Impossible de sérialiser la classe personnalisée

Lorsque j'essaie de passer à l'activité suivante, j'obtiens l'exception NotImplementedException (qui provient probablement du handle ou de la disposition). Je voudrais savoir si je fais quelque chose de mal avec la mise en œuvre de ma classe.

Voici la classe d'événements (que je tente d'envoyer à la prochaine activité):

public class Event : Object, ISerializable 
{ 
    private long id; 
    private string name; 
    private string description; 
    private double latitude = 0; 
    private double longitude = 0; 
    private User author; 
    private List<User> participants; 
    private List<EventDate> eventDates; 

    public Event(long id, string name, string description, double latitude, double longitude, User author, List<User> participants, List<EventDate> eventDates) 
    { 
     this.id = id; 
     this.name = name; 
     this.description = description; 
     this.latitude = latitude; 
     this.longitude = longitude; 
     this.author = author; 
     this.participants = participants; 
     this.eventDates = eventDates; 
    } 

    public Event(long id, string name, string description, User author) 
    { 
     this.id = id; 
     this.name = name; 
     this.description = description; 
     this.author = author; 
     this.participants = new List<User>(); 
     this.eventDates = new List<EventDate>(); 
    } 

    public long Id 
    { 
     get { return id; } 
    } 

    public string Name 
    { 
     get { return name; } 
    } 

    public string Description 
    { 
     get { return description; } 
    } 

    public double Latitude 
    { 
     get { return latitude; } 
    } 

    public User Author 
    { 
     get { return author; } 
    } 

    public List<User> Participants 
    { 
     get { return participants; } 
    } 

    public List<EventDate> EventDates 
    { 
     get { return eventDates; } 
    } 

    public IntPtr Handle 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public EventDate getBestDate() 
    { 
     EventDate bestDate = null; 
     foreach (EventDate date in eventDates) 
     { 
      if (bestDate == null || date.AvailableUsers.Count > bestDate.AvailableUsers.Count) 
      { 
       bestDate = date; 
      } 
     } 
     return bestDate; 
    } 

    public void addParticipant(User participant) 
    { 
     this.participants.Add(participant); 
    } 

    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 

Cette classe est dans le projet (Portable) et non dans le projet .Droid, puisque je dois aussi dans iOS.

Quelqu'un pourrait me dire ce que je fais mal ou peut-être suggérer une alternative?

Merci d'avance.

Répondre

0

Vous avez changé ISerializable à Java.IO.ISerializable.

J'ai créé cette façon

class MySerializable : Object, Java.IO.ISerializable 
    { 
     public string Value {get; private set;} 

     public MySerializable (IntPtr handle, JniHandleOwnership transfer) 
      : base (handle, transfer) 
     { 
     } 

     public MySerializable() 
     { 
     } 

     public MySerializable (string value) 
     { 
      Value = value; 
     } 
} 

Pour plus de détails ceci:

https://developer.xamarin.com/api/type/Java.IO.ISerializable/

Espérons que cela vous aidera.

+0

Cela ne fonctionne pas pour moi, j'utilise déjà 'Java.IO.Serializable', mais au lieu de le mettre comme ça je l'ai importé comme' using Java.IO; ' –

+0

@DennisvanOpstal obtenez-vous une erreur? – Ironman

+0

Changer mon code pour votre code ne change rien; J'ai toujours besoin des méthodes Handle() et Dispose() qui font planter mon application à cause de NotImplementedException. –