【发布时间】:2020-08-15 19:54:49
【问题描述】:
我想用 DOM 和 Transformer 编写 gpx 文件
我的代码是这样的
try {
val document =
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()
val trkpt = document.createElement("trkpt")
trkpt.setAttribute("lat", "-33.626932")
trkpt.setAttribute("lon", "-33.626932")
val ele = document.createElement("ele")
ele.appendChild(document.createTextNode("-6"))
trkpt.appendChild(ele)
document.appendChild(trkpt)
val transformer = TransformerFactory.newInstance().newTransformer()
transformer.setOutputProperty(OutputKeys.METHOD,"gpx")
val saveFolder = File(folderPath) // 저장 경로
if (!saveFolder.exists()) { //폴더 없으면 생성
saveFolder.mkdir()
}
val path = "route_${System.currentTimeMillis()}.gpx"
val file = File(saveFolder, path) //로컬에 파일저장
val source = DOMSource(document)
//val result = StreamResult(FileOutputStream(file))
val result = StreamResult(System.out)
transformer.transform(source, result)
return Uri.fromFile(file)
}catch(e:Exception){
e.printStackTrace()
}
输出是这样的
<?xml version="1.0" encoding="UTF-8"?><trkpt lat="-33.626932" lon="-33.626932"><ele>-6</ele></trkpt>
但我想把标签改成这样
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="TraceDeTrail http://www.tracedetrail.fr" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd ">
我怎样才能这样编辑,属性也是如此
我尝试从 JPX 更改为我自己的原因是我需要从航点获取时间。 enter image description here
有时,我需要从 WayPoint 类中获取时间,但时间的类型是 ZonedDateTime。但它不适用于 SDK 24...是否有任何解决方案从航点获取时间?
我添加了 ThreeTenABP,但我不知道我是如何使用它的。 我在 Gradle 上添加库并在 app-instance 中初始化 但它仍然会出错
wpList.add(
WayPoint.builder()
.lat(currentLatLng.latitude)
.lon(currentLatLng.longitude)
.name("Start")
.desc("Start Description")
.time(System.currentTimeMillis()) <- RunningActivity.kt:107
.type(START_POINT)
.build()
)
2020-05-06 16:46:16.895 8877-8877/com.umpa2020.tracer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.umpa2020.tracer, PID: 8877
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/Instant;
at io.jenetics.jpx.WayPoint$Builder.time(WayPoint.java:767)
at com.umpa2020.tracer.main.start.running.RunningActivity.start(RunningActivity.kt:107)
at com.umpa2020.tracer.main.start.running.RunningActivity.onSingleClick(RunningActivity.kt:175)
at com.umpa2020.tracer.util.OnSingleClickListener$DefaultImpls.onClick(OnSingleClickListener.kt:19)
at com.umpa2020.tracer.main.start.BaseRunningActivity.onClick(BaseRunningActivity.kt:45)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.Instant" on path: DexPathList[[zip file "/data/app/com.umpa2020.tracer-2/base.apk"],nativeLibraryDirectories=[/data/app/com.umpa2020.tracer-2/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at io.jenetics.jpx.WayPoint$Builder.time(WayPoint.java:767)
at com.umpa2020.tracer.main.start.running.RunningActivity.start(RunningActivity.kt:107)
at com.umpa2020.tracer.main.start.running.RunningActivity.onSingleClick(RunningActivity.kt:175)
at com.umpa2020.tracer.util.OnSingleClickListener$DefaultImpls.onClick(OnSingleClickListener.kt:19)
at com.umpa2020.tracer.main.start.BaseRunningActivity.onClick(BaseRunningActivity.kt:45)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
【问题讨论】:
标签: android xml kotlin dom gpx