2016-08-28 43 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