2016-05-31 119 views
2

我正在製作一個定義文件列表的瀏覽器。 我想壓縮空文件夾(如基於想法IDE usally可以做)構建文件夾緊湊樹的最佳方法是什麼?

本來我有一個文件列表(我從MediaStore得到它):

folder1/folder2/folder3/file1.mp3 
folder1/folder2/folder3/file2.mp3 
folder1/file3.mp3 

而且我希望我的瀏覽器具有此結構:

folder1 
     -folder2/folder3 
         -file1.mp3 
         -file2.mp3 
     -file3.mp3 

我是怎麼做的:

當F IRST的時間,我從MediaStore得到的文件,我在數據庫中創建一個表:

id name parent_id has_songs 
0 folder1 -1 1 
1 folder2 0 0 
2 folder3 1 1 

當每一個瀏覽器顯示的文件夾時它對數據庫的請求。 然後我開始檢查裏面的文件夾(每次檢查需要額外的數據庫請求):如果一個文件夾沒有歌曲,只有一個子文件夾,然後壓縮它們,然後檢查下一個和下一個。

這樣上面,如果我想看到「內部」的文件夾1它3個請求當地分貝例如:

1. Get list of all folders (Make a request to the db here) 
2. Check folder2 has one subfolder and doesn't have songs (Make a request to the db here) 
3. Check folder3 has one subfolder and doesn't have songs (Make a request to the db here) 

1.那是最好的方式來實現這一點?

2.是否性能至關重要 在用戶點擊時向本地數據庫發出如此多的請求?

+0

你可以看到這個庫:https:// github。com/bmelnychuk/AndroidTreeView –

+0

@licon使用此庫不會改變任何內容,無論如何,我必須對數據庫執行相同的請求來擴充庫樹。 –

回答

1

這取決於你的環境。 :)

一般: 如果文件列表是比較小的,值得考慮,如果你能保持所有信息在內存中。如果你有足夠的可用內存,這可能是最好的解決方案,因爲它比到達數據庫要快得多。我曾經創建一個實際上代表目錄和文件結構的對象,之後視圖端根據用戶需求打開並關閉塊。 (全部打開,全部關閉等)

這是實現它的最佳方式嗎? 環境是關鍵。正如我所說,這可能是一個很好的解決方案。如果您正在使用遠程(或更高級的 [SQLite is able to do it])數據庫服務器,則創建包含子計數的視圖也是一件好事。 (或者簡單地改變引入「inside_dir_count」字段的生成表)。這樣你可以獲取整個路徑。

在用戶點擊時向本地數據庫發出如此多的請求是否性能至關重要? 這是一個相對較小的請求,您在這裏代表的數據庫,如果它真的取決於點擊用戶這是一個很好的解決方案。所提到的本地數據庫應該很少響應。這個動作不會每秒發生1000次,所以在我個人看來這是一個很好的解決方案,但是像任何事情都有改進的空間。

+0

非常感謝Mark。我問了這個問題,以防萬一我犯了一個大錯誤,但沒有看到。現在我對我的決定有了更多的信心。 –

相關問題