2014-03-25 29 views
0

我有这样的方法:Android的长字符串concatenament,

private String convertPolygonToJSON(Polygon p) { 
     List<LatLng> points=p.getPoints(); 
     String s="[1,["+points.get(0); 
     for (int i = 1; i < points.size(); i++) { 
      s=s+","+points.get(i); 
     } 
     s=s+"],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]"; 
     return s; 

} 

private String getJsonPolygones(List<Polygon> polys) { 
     String s=""; 
     for (int i = 0; i < polys.size(); i++) { 
      s=s+convertPolygonToJSON(polys.get(i))+","; 

     } 
     return s; 
    } 

该转换polygone到JSON字符串, 的问题是,polgon有很多点的这种功能被称为成一个圈来转换列表多边形的最终JSON。

我想,它需要大量的内存,我看到很多GC登录,甚至在15分钟后循环不会结束。

(我有polygones(7XXX点,4XXX点,2XX点的列表.....)

我想知道是否有另一种得到这个JSON。

欢迎任何帮助,谢谢你提前

+5

使用StringBuilder? – npinti

+0

@npinti你可以做出答案 – fge

+0

谢谢我会试试这个。 – Simo

回答

5

因为p eople往往忽略注释,在你的情况下,你每次创建一个新的字符串对象,因为字符串是不可变的。这将导致大量的内存消耗,从而导致更高的GC活动。

使用StringBuilder将让你走没有这样的内存开销您有效地连接字符串:

private String convertPolygonToJSON(Polygon p) { 
     List<LatLng> points=p.getPoints(); 
     StringBuilder sb = new StringBuilder("[1,["+points.get(0)); 
     for (int i = 1; i < points.size(); i++) { 
      sb.append(+ ","+points.get(i)); 
     } 
     sb.append("],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]"); 
     return sb.toString(); 

} 

而且类似的其他方法。

0

在这种字符串使用的,你必须使用StringBuilder 应用到你的代码中获得:。

private String convertPolygonToJSON(Polygon p) { 
    List<LatLng> points = p.getPoints(); 
    StringBuilder sb = new StringBuilder(); 
    sb.append("[1,["); 
    sb.append(points.get(0)); 
    for (int i = 1; i < points.size(); i++) { 
     sb.append(','); 
     sb.append(points.get(i)); 
    } 
    sb.append("],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]"); 
    return sb.toString(); 
} 

private String getJsonPolygones(List<Polygon> polys) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < polys.size(); i++) { 
     sb.append(convertPolygonToJSON(polys.get(i))); 
     sb.append(','); 
    } 
    return sb.toString(); 
} 
+1

这应该是一条评论 –

0

字符串类是不可变的类,因此修改字符串需要更多的内存& CPU使用情况(重复工作正在进行时)。

对于这样的操作,我建议您使用StringBuilerStringBuffer类。

这些都是可变类。因此你可以对它们进行字符串操作。