尝试将对象写入内部存储会导致NotSerializableException

时间:2018-10-30 23:11:27

标签: java android

我正在尝试将一个对象写入内部存储。

这会导致:“ java.io.NotSerializableException:android.support.v7.widget.RecyclerView”

public static void writeObject(Context context, String key, Object object)
        throws IOException {
    FileOutputStream fos = context.openFileOutput(key, Context.MODE_PRIVATE);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(object);
    oos.close();
    fos.close();
}

public static Object readObject(Context context, String key) throws IOException,
        ClassNotFoundException {
    FileInputStream fis = context.openFileInput(key);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Object object = ois.readObject();
    return object;
}

public class Squarevaluse implements Serializable{
    String repoName;
    String repoDescrption;
    String repoOwnerName;
    String repoFork;
    String repoUrl;
    String OwnerUrl;
    Context context;
} 

1 个答案:

答案 0 :(得分:0)

将您的Squarevalue类设为静态,然后删除context字段:

public static class SquareValue implements Serializable {
    String repoName;
    String repoDescrption;
    String repoOwnerName;
    String repoFork; 
    String repoUrl;
    String OwnerUrl;
}

如果该类不是静态的,则父类也需要实现Serializable。由于这是一个数据类,因此可以轻松将其设置为静态。

但是,

上下文不是可序列化的,因此您不能在可序列化的类中使用它。您需要找到将Context对象传递到所需位置的其他方法(在RecyclerView Adapter中并不难:只需创建一个接受Context对象并将其分配给全局变量的自定义构造函数即可;如果您有权访问View对象,请使用view.getContext())。


我还重命名了您的类,以符合Java语法准则。类是TitleCase,因此每个“单词”的首字母大写。