我在Cordova中构建了一个使用Google MyMaps数据的Android应用。所以,我试图直接从谷歌下载kml文件进行解析。如果文件不存在于设备上,则下载有效,但一旦文件存在,FileReader就会拒绝工作。
这是我的代码:
let transfer = new FileTransfer()
let uri = encodeURI(`https://www.google.com/maps/d/kml?mid=${mapId}&forcekml=1`)
let fileUrl = 'cdvfile://localhost/persistent/mapdata.kml'
transfer.download(uri, fileUrl, (entry) => {
let url = entry.toURL()
let path = entry.fullPath
console.log('cart: complete!, '+url+", "+path)
entry.file((file) => {
console.log('cart: reading map file')
let reader = new FileReader()
reader.onload = (evt) => {
console.log("cart: finished reading file")
setTimeout(() => parseMapData(evt.target.result), 750)
}
reader.onloadend = reader.onload // failsafe
reader.readAsText(file)
}, (err) => {
alert('file read err')
})
}, (error) => {
alert('error!')
}, true, {
headers: {
'Access-Control-Allow-Origin': '*'
}
})
如果文件存在,似乎无法调用文件阅读器的onload和onloadend。因此,我必须在再次下载之前删除该文件,无论是持久存储还是临时存储。我希望能够为应用的多个负载缓存此数据并重新读取而不是重新下载。
如果我只是在没有下载的情况下阅读现有文件,有时我可以加载它但似乎不一致。
这可能会发生什么?
更新:即使删除文件并重新下载,它也无法正常工作。无论出于何种原因,它偶尔会起作用。所以一般来说,在Android上我没有使用FileReader。 readAsText
未被调用或onload
/ onloadend
未被调用(我已尝试单独使用)。我能做些什么吗?