2013-12-13 95 views
2

我有谷歌地圖的應用程序,因爲谷歌地圖不提供API在Android地圖上創建路線,我使用WebApi來獲取路線。 我將路由存儲在ArrayList中,然後通過Intent將其傳入到我的活動中,其中刪除路由。如果LatLng對象少於2000年,它的效果很好,否則,如果它超過2000個對象,那麼我有Java活頁夾異常,也許意向有限制大小。 要處理超過2000個對象的情況,我將LatLng的緯度和經度保存爲文件並僅傳遞路徑,然後在活動中加載文件。但是這個文件很大〜0.5-3 mB。 我怎樣才能解決我的問題,或者我怎樣才能用double值壓縮我的數組列表?壓縮Arraylist或傳遞ArrayList與對象

+0

你可以向我們展示一些代碼或對象圖與陣列列表中的數據樣本?當我們看不到你已經做了什麼時,很難告訴你該怎麼做。謝謝。 – Husman

+0

在僅限ArrayList對象LatLng中,它們只有兩個字段(double) - 經度和緯度。 – onCreate

回答

1

一對夫婦的想法

  • 不要使用對象來封裝緯度/只要有額外的開銷。使用更簡潔的數據結構,例如雙精度數組或者緯度/長度座標的地理散列圖
  • 將輸出壓縮爲建議的另一個答案
  • 更高級的選項可能是使用一個trie編碼列表的geohashs。鑑於一條路線將由多個彼此非常接近的座標組成,「壓縮」可能相當高。
0

您可以將數據壓縮到ZipOutputStream並將其作爲原始字節傳遞或通過ZipFile使用。如果值更頻繁,壓縮應該是相當不錯的。

0

確保寫入數據時不浪費空間。不要使用文本/ ASCII/XML數據結構/文件來存儲數據。

使用DataOutputStreamwriteDouble(..)寫入數據的方法(結果:每個雙值8字節)。或者,您可以將雙精度值轉換爲浮點數並通過writeFloat(..)進行寫入 - 這會將要寫入的數據減半。通常用於在地圖上顯示點的浮點數仍然足夠精確。

閱讀作品當然只是使用DataInputStream

壓縮也是一種選擇,但更好地將要寫入的數據最小化,因爲壓縮會佔用大量CPU資源,這意味着它會消耗功率和時間。

+0

噢,我將我的雙打保存爲字符串文件,並將它們加載爲字符串並轉換爲雙精度:( – onCreate

+0

這幾乎是您可以做的最糟糕的事情,如果您想最小化保存的大小。 – Robert