Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化序列化对象时引发NotSerializableException_Java_Android_Serialization_Notserializableexception - Fatal编程技术网

Java 反序列化序列化对象时引发NotSerializableException

Java 反序列化序列化对象时引发NotSerializableException,java,android,serialization,notserializableexception,Java,Android,Serialization,Notserializableexception,我有一个很奇怪的问题。我加载的某些数据要另存为序列化对象。我以前做过这件事,但由于某种原因,我就是不能让它工作 奇怪的是,在序列化对象时没有抛出异常,这使我认为问题不在于可序列化对象。只有在读取序列化对象中的加载时才会引发异常 当您查看stacktrace时,第一行引用了不可序列化的OfflineDataHelpers类。我知道,但我甚至不想这样。只有类用户应该是,所以我不明白它为什么这么说 可序列化对象的用户类 public class User implements Serializable

我有一个很奇怪的问题。我加载的某些数据要另存为序列化对象。我以前做过这件事,但由于某种原因,我就是不能让它工作

奇怪的是,在序列化对象时没有抛出异常,这使我认为问题不在于可序列化对象。只有在读取序列化对象中的加载时才会引发异常

当您查看stacktrace时,第一行引用了不可序列化的OfflineDataHelpers类。我知道,但我甚至不想这样。只有类用户应该是,所以我不明白它为什么这么说

可序列化对象的用户类

public class User implements Serializable{

 private String username;
 private String remember;
 private String fullname;
 private String email;
 private int id;
 private String session_id;

 public User() {
 }

 @Override
 public String toString() {
     return "User{" +
             "id='" + id + '\'' +
             ", fullname='" + fullname + '\'' +
             '}';
 }

 public String getUsername() {
     return username;
 }

 public void setUsername(String username) {
     this.username = username;
 }

 public String getRemember() {
     return remember;
 }

 public void setRemember(String remember) {
     this.remember = remember;
 }

 public String getFullname() {
     return fullname;
 }

 public void setFullname(String fullname) {
     this.fullname = fullname;
 }

 public String getEmail() {
     return email;
 }

 public void setEmail(String email) {
     this.email = email;
 }

 public int getId() {
     return id;
 }

 public void setId(int id) {
     this.id = id;
 }

 public String getSession_id() {
     return session_id;
 }

 public void setSession_id(String session_id) {
     this.session_id = session_id;
 }

 public boolean isNotNull(){
     if (this.getId() >0 && this.getUsername().length()>1){
         return true;
     }
     return false;
 }
}
执行反序列化的OfflineDataHelpers类

public class OfflineDataHelpers{
 private Context context;
 private String USERFILENAME = "User.msl";

 public OfflineDataHelpers(Context context) {
     this.context = context;
 }


 public void saveUser(User user) {
     try {
         FileOutputStream fos = new FileOutputStream(getFileDir(USERFILENAME), true);
         ObjectOutputStream os = new ObjectOutputStream(fos);
         os.writeObject(user);
         os.close();
         System.out.println(user+" has been saved");
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

 public User loadUser() {
     User user = new User();
     try {
         FileInputStream fis = new FileInputStream(getFileDir(USERFILENAME));
         ObjectInputStream is = new ObjectInputStream(fis);
         user = (User) is.readObject();
         is.close();
         System.out.println(user+ " is loaded");
     } catch (Exception e) {
         e.printStackTrace();
     }
     return user;
 }

 public File getFileDir(String fileName) {
     return new File(context.getExternalFilesDir(null), fileName);
 }
}
在有效用户对象不为null的活动中调用函数saveUser和loadUser。如果我删除loadUser调用,则不会引发异常,它只会说:user。。。。得救

但是,当我添加函数loadUser时,stacktrace中会出现以下内容:

  08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException: com.example.myapp.others.OfflineDataHelpers
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:779)
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.others.OfflineDataHelpers.loadUser(OfflineDataHelpers.java:43)
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.others.NetworkingController.LoginRequest(NetworkingController.java:50)
08-06 11:19:12.971  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.fragments.InlogFragment.onActivityCreated(InlogFragment.java:77)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1508)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:958)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5017)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ Caused by: java.io.NotSerializableException: com.example.myapp.others.OfflineDataHelpers
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
08-06 11:19:12.981  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.others.OfflineDataHelpers.saveUser(OfflineDataHelpers.java:29)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.others.NetworkingController$AsyncLogin.doInBackground(NetworkingController.java:108)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at com.example.myapp.others.NetworkingController$AsyncLogin.doInBackground(NetworkingController.java:60)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-06 11:19:12.991  12097-12097/com.example.myapp W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
这表明我尝试序列化OfflineDataHelper,但我认为我没有。
有人知道吗?

在对OfflineDataHelpers类进行反序列化时会发生异常,它实现了Serializable?正如您在代码中看到的那样,它不会实现,但我认为也不应该,因为我不想尝试序列化它。和上下文,OfflineDataHelpers的一个参数是不可序列化的,因此它的超类也不能。您可以尝试从上下文调用FOS和FIS,如下面的链接,我将尝试,但在这种情况下,文件保存在哪里?以我的方式,我知道它被保存在正确的文件夹中…您同时解决了您的问题吗?OfflineDataHelpers是否可能在以前版本的代码中连接到用户类?