2011-05-15 21 views
1

我正在開發一個庫應用程序,並將書籍存儲爲.sqlite文件。每本書的sqlite數據庫文件大小約爲10MB。我首先試圖把它放在資產文件夾,然後將其複製到數據庫/文件夾,但由於文件大於1Mb,這給我一個IOException。然後我試圖從原始文件夾訪問它,但它仍然給我IOException。那麼,訪問這樣一個文件的正確方法是什麼?另外,將來應用程序可能需要從服務器下載這些文件,那麼在那種情況下,我應該在哪裏存儲這樣的數據庫文件?在Android中訪問.sqlite數據庫(> 1Mb大小)

謝謝!

回答

2

在Android 3.0之前你是not allowed to open files larger than 1mb

從鏈接:[P] rior到Android 2.3,無法從APK中讀取任何未壓縮大小超過1 MB的壓縮資產文件。

這裏有一些解決方案:

  1. 也許你想看看縮小數據庫的大小,這可能是通過使你自己的,或者刪除一些你不需要的條目/想。

  2. 另一種解決方案是將數據庫卸載到您有權訪問的服務器,並要求應用程序訪問Web以獲取此服務器所需的數據。我可以想象一個很好的RESTful API來做到這一點。

+0

爲我的答案增加了一些解決方案。 – 2011-05-15 05:13:39

+0

感謝您的鏈接。資產文件夾中的文件從.sqlite擴展爲「.jpg」的工作已經完成!我知道這不是最好的解決方案,但它的工作原理! – techno 2011-05-15 05:27:08

+0

嗨,1MB的限制,仍有新的Android操作系統呢?我找不到任何關於此的文檔。你有什麼想法在哪裏可以找到它? - – GMsoF 2012-11-22 03:39:12

0

有一個解決此問題的方法。 1MB的限制僅適用於SQLite文件,而不適用於其他文件類型。將你的SQLite文件重命名爲類似「db.mp3」的文件,然後當你的應用程序啓動時,你可以將這個文件複製到你的SD卡上,並用它作爲SD卡上的普通SQLite文件。 我已經實現了這個解決方案,它在所有的Android版本上都能很好地工作。

+0

這不是真的。限制是針對所有壓縮文件的。一些文件擴展名默認情況下不會被壓縮,因爲它是沒有用的 - .MP3就是其中之一。 – hackbod 2011-05-15 07:18:52

+0

嗨,1MB的限制,仍有新的Android操作系統呢?我找不到任何關於此的文檔。你有什麼想法在哪裏可以找到它? - – GMsoF 2012-11-22 03:39:51

0

有應用從Web服務器下載數據庫到SD卡 - 這樣可以節省存儲.apk文件及雙方的壓縮版本之外的未壓縮版本的浪費。它並不是真的有更多不安全,因爲.apk只是一個真正想讀取的zip文件。