2013-12-13 66 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