gpt4 book ai didi

java - 绘制圆形时出现 InvalidClassException。为什么?

转载 作者:行者123 更新时间:2023-12-01 11:07:34 24 4
gpt4 key购买 nike

这是我第一次在android上画东西。我按照developers.android.com 上的教程进行操作:

http://developer.android.com/training/custom-views/custom-drawing.html

显然我应该创建一个自定义 View 并覆盖 onDraw 并且我可以开始在 Canvas 参数上绘图!所以我创建了一个像这样的 View :

public class CanvasView extends View {
private Canvas canvas;

public Canvas getCanvas() {
return canvas;
}

public CanvasView (Context c) {
super(c);
}

@Override
protected void onDraw (Canvas c) {
canvas = c;
Paint p = new Paint();
p.setColor (Color.BLACK);
c.drawCircle (50, 50, 25, p);
}
}

正如你所看到的,我有一个方法来获取 Canvas 对象。这是因为我希望能够从其他代码(不在此类中)向 View 添加内容。我认为我的代码是有道理的。我只想画一个黑色圆圈!

当我运行应用程序时,它立即崩溃并出现 InvalidClassException:

java.io.InvalidClassException: dfa; Incompatible class (SUID): dfa: static final long serialVersionUID =8874316054258000122L; but expected dfa: static final long serialVersionUID =0L;
at java.io.ObjectInputStream.verifyAndInit(ObjectInputStream.java:2383)
at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1665)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1806)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2006)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1963)
at com.google.android.apps.plus.service.EsService.c(PG:5140)
at com.google.android.apps.plus.service.EsService.b(PG:5064)
at com.google.android.apps.plus.service.EsService.a(PG:2522)
at com.google.android.apps.plus.service.EsService.c(PG:2613)
at com.google.android.apps.plus.service.PackageAddedReceiver.onReceive(PG:37)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2488)
at android.app.ActivityThread.access$1500(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)

我搜索了有关 InvalidClassException 的问题,但没有发现这样的问题。它们都是关于反序列化的东西。我在调用堆栈中发现了与序列化相关的单词 serialVersionUID,但我的代码对序列化没有做任何事情!

我认为这可能是因为 Canvas 字段。如果这确实是问题所在,是否有其他方法可以在 UI 上绘制内容而不使用可绘制资源文件?如果这不是问题,那么问题是什么?我不知道为什么 InvalidClassException 与绘图有任何关系。

最佳答案

看起来serialVersionUID(因为代码中没有明确定义)自动生成为8874316054258000122L,这不是预期的。

尝试按照dfa的预期手动将serialVersionUID设置为0L:

private static final long serialVersionUID = 0L;

关于java - 绘制圆形时出现 InvalidClassException。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32782516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com