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

时间:2019-02-12 06:32:23

标签: codenameone

java.io.FileNotFoundException: /Users/jamesagada/.cn1/cn1ConCache/aHR0cHM6Ly96aWVtb3ppLWEzZWYucmVzdGRiLmlvL3Jlc3QvemllbW96aS11c2Vycz9maWx0ZXI9JnE9JTdCJTIycGhvbmUlMjIlM0ElMjAlMjIwODAzNDAyMTI2OCUyMiUyMCUyQyUyMnBhc3N3b3JkJTIyJTNBJTIwJTIydHdhbGElMjIlMjAlN0QmbWV0YWZpZWxkcz10cnVlJm1heD0xMCZoPSU3QiUyMiUyNG9yZGVyYnklMjIlM0ElN0IlMjJfY3JlYXRlZCUyMiUzQSUyMC0xJTIwJTdEJTdEJnNraXA9MCZmZXRjaENoaWxkcmVuPXRydWU=
     

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

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

2 个答案:

答案 0 :(得分:1)

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

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

ConnectionRequest.setDefaultCacheMode(ConnectionRequest.CachingMode.OFF);

答案 1 :(得分:0)

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