2017-12-27 98 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); 
    } 
}