是否可以序列化单个类阵列,以便将其发送到另一个活动?

时间:2016-03-27 04:36:23

标签: android class serialization

我试图将Faults [current]单个类传递给Fault_Page活动。但遇到了

  

Parcelable遇到IOException编写可序列化对象   引起的   java.io.NotSerializableException

在OnCreate函数

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Select_Click();
        }
    });
public void Select_Click(){
    Intent FaultPage=new Intent(this,Fault_Page.class);
    Fault send=Faults[current_swap];
    FaultPage.putExtra("FaultClass", send);
    startActivity(FaultPage);
}
int fault_number=15;
class Fault implements Serializable{
    public String fault_name="Not known";
    public int L_number=0,T_number=0;

    public void Record(){};//currently empty functions

    public void Save(){};

    public void Delete(){};
}
Fault[] Faults;
Faults=new Fault[15];
    for(int i=0;i<Faults.length;i++){
        Faults[i]=new Fault();
    }

我搜索了类似的问题和他们的答案。但是,大多数情况下出现的错误是在没有工具的情况下宣布内部阶级,这与我不同。我甚至将我的MainActivity类更改为Serializable。但是在StartActivity函数中仍然会出现错误。字符串可以序列化吗?还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

问题出现是因为您的内部类Fault未声明为static

内部类总是对其封闭类有一个隐式引用,因此当内部类实例被序列化时,它的封闭类实例也必须被序列化。而且我打赌封闭的类没有实现Serializable。没关系;无论如何你都不会想要它。

为了让你前进,你可以像这样声明Fault

    static class Fault implements Serializable {

这会让你超越NotSerializableException