Это первый раз, когда я рисую что-то на android. Я последовал за учебник по developers.android.com:InvalidClassException при рисовании круга. Зачем?
http://developer.android.com/training/custom-views/custom-drawing.html
И очевидно, что я должен создать пользовательский вид и переопределить onDraw
и я могу начать рисовать от параметра Canvas
! Таким образом, я создал такое же представление:
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. Это связано с тем, что я хочу иметь возможность добавлять материал в представление из другого кода (не в этом классе). Я думаю, что мой код имеет смысл. Я просто хочу нарисовать черный круг!
Когда я запустить приложение, он разбился сразу с 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)
Я искал вопросы abount InvalidClassException
сек, но я не нашел ничего подобного. Все они касаются десериализации. Я нашел слово serialVersionUID
, которое имеет отношение к сериализации в стеке вызовов, но мой код ничего не делает с сериализацией!
Я думаю, что это может быть из-за поля Canvas
. Если это действительно проблема, есть ли другой способ, который я могу нарисовать в пользовательском интерфейсе, но без использования доступных ресурсов? Если это не проблема, то что? Я не знаю, почему InvalidClassException
имеет отношение к рисованию.
Когда я запускаю второй раз, исключение не выбрасывается! Вы можете это объяснить? – Sweeper
Ммм, я считаю, что он автоматически устанавливается в 0L, как и ожидалось dfa, после того, как исключение выбрано – Anto
Мое предложение работает? – Anto