2017-12-27 97 views
0

我有課,因爲我需要它傳遞活動之間實現Serializable接口的getString實現Serializable接口

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

但在天類我需要閱讀一些字符串像這樣:

context.getString(R.string.sick_list); 

如果我通過構造函數傳遞給這個類的上下文像這樣:

Day tempDay = new Day(context); 

開始DayCr當我得到一個錯誤發起人活動:

Parcelable encountered IOException writing serializable object 

這使得情況,因爲上下文是不可序列化。

所以...我如何從實現Serializable的類獲取字符串?

+0

「但每天一班我需要閱讀一些字符串是這樣的「 - 恕我直言,DayCreator應該讀取該字符串(或者可能是開始」DayCreator「的任何活動)。 'Day'應該被當作某種模型對象,與字符串資源無關。 – CommonsWare

+0

在對象上保存'context'引用是非常危險的。這是一個更好的方法,使需要上下文的方法接收爲參數,使用它並返回而不保存對它的引用 –

+0

在Day類中,我有函數根據內部計算返回不同的字符串,這些字符串位於xml文件。與DayCreator沒有任何關係 – Dim

回答

1

不要將上下文傳遞給POJO
一個簡單的解決方法就是讓組件讀取字符串並將其傳遞給Day對象。如下面你的組件(活動或服務)。

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

當你試圖通過捆綁發送整個模型對象..它應該是這樣的

Day類變化這樣

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); 
    } 
}