为什么codenameone REST给我文件名太长错误?

问题描述 投票:0回答:2
java.io.FileNotFoundException: /Users/jamesagada/.cn1/cn1ConCache/aHR0cHM6Ly96aWVtb3ppLWEzZWYucmVzdGRiLmlvL3Jlc3QvemllbW96aS11c2Vycz9maWx0ZXI9JnE9JTdCJTIycGhvbmUlMjIlM0ElMjAlMjIwODAzNDAyMTI2OCUyMiUyMCUyQyUyMnBhc3N3b3JkJTIyJTNBJTIwJTIydHdhbGElMjIlMjAlN0QmbWV0YWZpZWxkcz10cnVlJm1heD0xMCZoPSU3QiUyMiUyNG9yZGVyYnklMjIlM0ElN0IlMjJfY3JlYXRlZCUyMiUzQSUyMC0xJTIwJTdEJTdEJnNraXA9MCZmZXRjaENoaWxkcmVuPXRydWU=

(文件名太长)java.io.FileOutputStream.open(FileOutputStream.java:270)的java.io.FileOutputStream.open0(本地方法),java.io.FileOutputStream。(FileOutputStream.java:213)。 io.FileOutputStream。(FileOutputStream.java:101)位于com.codename1.impl.javase.JavaSEPort.openFileOutputStream(JavaSEPort.java:8543)的com.codename1.io.FileSystemStorage.openOutputStream(FileSystemStorage.java:274)。 codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:792)at com.codename1.io.NetworkManager $ NetworkThread.run(NetworkManager.java:282)at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) [网络线程] 0:0:19,345 - 异常:java.io.IOException - 流已关闭java.io.IOException:流在com.codename1处的com.codename1.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:140)处关闭。 io.BufferedInputStream.read1(BufferedInputStream.java:338)at com.codename1.io.BufferedInputStream.read(BufferedInputStream.java:445)at com.codenam e1.io.BufferedInputStream.read(BufferedInputStream.java:668)位于com.codename1.io.Util.copyNoClose(Util.java:136)的com.codename1.io.Util.copyNoClose(Util.java:122)at com .codename1.io.Util.copy(Util.java:157)位于com.codename1.io.Util.copy(Util.java:111)的com.codename1.io.Util.readInputStream(Util.java:206)at at Com.codename1.io.ConnectionRequest.readResponse(ConnectionRequest.java:1308)位于com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:797)的com.codename1.io.NetworkManager $ NetworkThread.run(NetworkManager.java: 282)at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

这是我在使用REST访问URL时遇到的错误。我想不出任何理由。我注意到,当指定了一些查询参数但服务器返回有效结果时会发生这种情况。

codenameone
2个回答
1
投票

这是因为ConnectionRequest的默认缓存模式是智能缓存。因此,我们尝试保存连接的内容以供以后检索。这忽略了Windows FAT文件系统对文件长度有限制的事实。这对于即将到来的更新是固定的,并且将文件名限制为255个字符,这应该起作用。此更新还将API cacheMode(ConnectionRequest.CachingMode)添加到RequestBuilder类,以便您可以在单个级别上自定义缓存。

作为解决方法,您可以使用以下命令全局禁用缓存:

ConnectionRequest.setDefaultCacheMode(ConnectionRequest.CachingMode.OFF);

0
投票

刚刚得到了完全相同的问题,发现ConnectionRequest引发了一个内部异常,只有在模拟器中进行测试时才能找到。传递给请求的URL是base64编码的,这就是为什么它变成一个太长的文件名。在每个ConnectionRequest上设置缓存模式无效。所以唯一的解决方法是使用setDefaultCacheMode。我希望测试下一个版本。

© www.soinside.com 2019 - 2024. All rights reserved.