2017-12-27 2 views
0

Ich habe Klasse implementiert, die Serializable implementiert, weil ich es zwischen den Aktivitäten weitergeben müssen:getString von Klasse, die Serializable

Day tempDay = new Day(); 
Intent i = new Intent(this, DayCreator.class); 
i.putExtra("DayClass", tempDay); 
startActivity(i); 

Aber in Day-Klasse muss ich als so eine Schnur lesen:

context.getString(R.string.sick_list); 

Wenn ich zu dieser Klasse Kontext als so über Konstruktor übergeben:

Day tempDay = new Day(context); 

ich erhalte eine Fehlermeldung, wenn DayCr Start eator activity:

Parcelable encountered IOException writing serializable object 

Dies macht Sinn, weil der Kontext nicht serialisierbar ist.

So ... Wie kann ich Strings aus Klasse, die Serializable implementiert?

+0

„Aber in Day-Klasse sein sollte, muss ich lesen eine Zeichenfolge als so "- IMHO, sollte' DayCreator' diese Zeichenfolge lesen (oder möglicherweise jede Aktivität, die 'DayCreator' startet). "Day" sollte als eine Art Modellobjekt behandelt werden, das nichts mit String-Ressourcen zu tun hat. – CommonsWare

+0

Es ist sehr gefährlich, 'Kontext'-Verweis auf Objekte zu halten. Es ist ein besserer Ansatz, die Methoden, die einen Kontext benötigen, als Parameter zu verwenden, zu verwenden und ohne Speichern eines Verweises darauf zurückzugeben. –

+0

In der Day-Klasse habe ich eine Funktion, die je nach inneren Berechnungen unterschiedliche Strings zurückgibt, diese Strings befinden sich in xml Datei. Es gibt nichts mit DayCreator zu tun – Dim

Antwort

1

Den Kontext nicht an Klasse übergeben.
Eine einfache Problemumgehung ist nur lassen Sie Ihre Komponente lesen Sie die Zeichenfolge und übergeben Sie es an die Object. wie unten in Ihrer Komponente (Aktivität oder Service).

Day tempDay = new Day(); 
tempDay.setName((getString(R.string.app_name)); 
1

Während Sie versuchen durch Bündel ganze Modellobjekt zu senden .. es ähnliche

Ihre Day Klasse Änderung wie diese

public class QrCode implements Parcelable { 

    public static final Creator<QrCode> CREATOR = new Creator<QrCode>() { 
     @Override 
     public QrCode createFromParcel(Parcel in) { 
      return new QrCode(in); 
     } 

     @Override 
     public QrCode[] newArray(int size) { 
      return new QrCode[size]; 
     } 
    }; 

    @SerializedName("sno") 
    private int mSNo; 

    public QrCode(){ 

    } 

    public QrCode(Parcel in) { 
     mSNo = in.readInt(); 
    } 


    public int getSNo() { 
     return mSNo; 
    } 

    public void setSNo(int SNo) { 
     mSNo = SNo; 
    } 
    @Override 
    public int describeContents() { 
     return hashCode(); 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeInt(mSNo); 
    } 
} 
Verwandte Themen