【问题标题】:Is it possible to serialize single unit of class array, in order to send it to another activity?是否可以序列化单个类数组单元,以便将其发送到另一个活动?
【发布时间】:2016-03-27 13:01:01
【问题描述】:

我正在尝试将 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 函数中仍然会出现错误。字符串可以序列化吗?还是我错过了什么?

【问题讨论】:

  • 是的,String可以序列化。我认为问题可能是,intent 可以携带 Parcelable Objects。你为什么不尝试转换class Fault implements Parcelable

标签: android class serialization


【解决方案1】:

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

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

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

    static class Fault implements Serializable {

这将使您通过NotSerializableException

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多