2016-08-28 31 views
0

我有一个应用程序从互联网上下载一些文件。源文件名是根据用户选择动态生成的。我使用以下方法创建源文件名。请注意,fileId是整数(1-99)。Android String.format()返回问号(??)

final String fileName = "file_" + String.format("%02d", fileId) + "_download.jpg"; 

的问题我已经看到了一些用户无法下载文件(当然他们离开1日开始评级:()。当我检查我的服务器日志中我看到一些下载请求带着像file_??_download.jpg文件名它看起来像String.format()返回的??而不是两个数字。

我到处搜寻,但没有找到一个解决方案。谁能告诉我有什么不对的代码呢?我连上重新产生此错误任何我的设备。

谢谢!

回答

2

你必须这样做,而不是:

final String fileName = "file_" + String.format("%d", fileId) + "_download.jpg";

final String fileName = "file_" + fileId + "_download.jpg";

如果你真的想只有最后两个数字,做到这一点:

int formattedFileId = fileId % 100; 
final String fileName = "file_" + (formattedFileId < 10 ? '0' : '') + String.format("%d", formattedFileId) + "_download.jpg"; 

int formattedFileId = fileId % 100; 
final String fileName = "file_" + (formattedFileId < 10 ? '0' : '') + formattedFileId + "_download.jpg"; 
+0

嗨奥古斯托,谢谢你的回答。我用您的代码更新了我的应用程序。在接受这个答案之前,我会继续检查日志,看看这个问题是否仍然存在。 –

+0

看起来像是固定的。谢谢! –

2

String.format将使用数字作为默认语言环境,不一定是0-9。使用允许设置语言环境的版本,并通过Locale.ROOT

String.format(Locale.ROOT, "%02d", fileId) 
+0

谢谢乔尼。怎么样使用Locale.ENGLISH?这是否会在非英语设备上发出任何问题? –

+0

不,但它提出了一个问题,为什么特别是“英语”,而不是通用的根区域设置。 – Joni