【问题标题】:Reading object from file throws IllegalAccessException从文件中读取对象抛出 IllegalAccessException
【发布时间】:2014-03-24 21:03:26
【问题描述】:

我知道我不应该使用这种方法,但我是出于测试目的。 我创建了一个扩展 LinearLayout 并实现 Serializable 的类,以便能够将整个布局保存到文件中。

向此布局添加视图后,我将其成功写入文件。但是当读回对象时,我得到一个错误IllegalAcessException;有没有办法解决这个问题?

CustomLayout.class

public class CustomLayout extends LinearLayout implements Serializable{

public static final long serialVersionUID = 1000;

public LinearLayout_Serializable(Context context) {
    super(context);
}

public LinearLayout_Serializable(Context context, AttributeSet attributeset){
    super(context,attributeset);
}

}

有什么帮助吗?并提前感谢

完全错误

 02-23 12:06:01.165: W/System.err(21887): java.io.InvalidClassException:  android.widget.LinearLayout; IllegalAccessException

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectStreamClass.resolveConstructorClass(ObjectStreamClass.java:692)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:653)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1819)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2006)

 02-23 12:06:01.165: W/System.err(21887):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1963)

 02-23 12:06:01.165: W/System.err(21887):   at com.example.fastlayout.MainActivity.readFromFile(MainActivity.java:232)

 02-23 12:06:01.165: W/System.err(21887):   at com.example.fastlayout.MainActivity.onCreate(MainActivity.java:102)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.Activity.performCreate(Activity.java:5372)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.ActivityThread.access$700(ActivityThread.java:159)

 02-23 12:06:01.165: W/System.err(21887):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)

 02-23 12:06:01.170: W/System.err(21887):   at android.os.Handler.dispatchMessage(Handler.java:99)

 02-23 12:06:01.170: W/System.err(21887):   at android.os.Looper.loop(Looper.java:176)

 02-23 12:06:01.170: W/System.err(21887):   at android.app.ActivityThread.main(ActivityThread.java:5419)

 02-23 12:06:01.170: W/System.err(21887):   at java.lang.reflect.Method.invokeNative(Native Method)

 02-23 12:06:01.170: W/System.err(21887):   at java.lang.reflect.Method.invoke(Method.java:525)

 02-23 12:06:01.170: W/System.err(21887):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)

 02-23 12:06:01.170: W/System.err(21887):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)

 02-23 12:06:01.170: W/System.err(21887):   at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 请发布您的完整堆栈跟踪。
  • 我编辑了我的问题以发布它:) @FD_

标签: android file exception layout serialization


【解决方案1】:

似乎他ObjectStreamClass 正在寻找一个空的构造函数来实例化您的自定义类。

 // Has to have an empty constructor
        if (constructor == null) {
            String className = constructorClass != null ? constructorClass.getName() : null;
            throw new InvalidClassException(className, "IllegalAccessException");
        }

LinearLayout 没有空的构造函数。尝试只添加一个空的构造函数

public LinearLayout_Serializable() {
    this(//getContextSomehow());
}

【讨论】:

  • 我尝试为上下文声明一个静态变量来保存它的实例,并且我做了一个带有 super(//保存的上下文) 的空构造函数,但它不起作用。这是你建议的吗? @纳尔逊拉米雷斯
  • 是的,将上下文传递给下一个构造函数会很棘手。
  • 原来 LinearLayout 需要一个隐式构造函数来初始化它,我不知道如何解决它
  • 我猜你想尝试自己获取一个类 ref 并自己实例化它..
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多