【发布时间】:2017-08-13 13:09:45
【问题描述】:
我需要序列化 Path 对象并面临奇怪的不可能。应用程序刚刚停止。
让我们在 onCreate() 中放置一个简单的测试
import com.google.gson.Gson;
import android.graphics.Path;
...
Gson g=new Gson();
Path p=new Path();
p.addRect(0,0,100,100, Path.Direction.CCW);
String s=g.toJson(p).toString();
p = g.fromJson(s, Path.class); //(1)
运行应用程序并等待约 5-15 秒。首先它挂起,然后会默默地崩溃。如果您注释字符串 (1),它将起作用。如果将 (1) 的 Path.class 更改为 p.getClass() 或 new TypeToken
我用 SDK 17 到 25 尝试了 4 台设备,并且行为是相同的。怎么了,如何存储 JSON 的路径?
p.s. gradle 使用 com.google.code.gson:gson:2.+
编辑:我的假设是无限路径的循环,这让 GSON 感到困惑。
edit2:他们说,不可能序列化Path。我用并行列表围绕 Path 编写了自己的实现,效果很好
edit3:这里可能出现错误和 cmets 中询问的字符串
08-13 19:33:40.380 883-1405/? E/NativeCrashListener:异常处理 有报告 android.system.ErrnoException:读取失败:EAGAIN(再试一次) 在 libcore.io.Posix.readBytes(本机方法) 在 libcore.io.Posix.read(Posix.java:165) 在 libcore.io.BlockGuardOs.read(BlockGuardOs.java:230) 在 android.system.Os.read(Os.java:350) 在 com.android.server.am.NativeCrashListener.consumeNativeCrashData(NativeCrashListener.java:240) 在 com.android.server.am.NativeCrashListener.run(NativeCrashListener.java:138)
.
s={"isSimplePath":true,"mLastDirection":"CCW","mNativePath":-1221497024,"rects":{"mNativeRegion":-1222844744}}
【问题讨论】:
-
异常中有什么?发布它,如果可能的话也发布
s的值 -
@Yazan 查看已编辑的问题。我不确定例外,但只有一个。
-
此异常中没有任何内容表明它是由您的应用程序引起的,它来自操作系统和平台,除非它是由您的应用程序引起的,那么这是我不知道的事情!!,JSON 看起来很简单,我不知道认为它会导致这样的循环或递归问题?!
-
@Yazan 是的。请参阅下面的答案。