我试图将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函数中仍然会出现错误。字符串可以序列化吗?还是我错过了什么?
答案 0 :(得分:2)
问题出现是因为您的内部类Fault
未声明为static
。
内部类总是对其封闭类有一个隐式引用,因此当内部类实例被序列化时,它的封闭类实例也必须被序列化。而且我打赌封闭的类没有实现Serializable
。没关系;无论如何你都不会想要它。
为了让你前进,你可以像这样声明Fault
:
static class Fault implements Serializable {
这会让你超越NotSerializableException
。