Android长串连接,

时间:2014-03-25 09:19:49

标签: java android json string

我有这样的方法:

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;
    }

将多边形转换为json String, 问题是polgon有很多要点,这个函数被调成一个循环,将多边形List转换为最终的json。

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

(我有一个多边形列表(7xxx点,4xxx点,2xx点.....)

我想知道是否有替代方法可以获得此JSON。

欢迎任何帮助,谢谢你。

3 个答案:

答案 0 :(得分:5)

由于人们倾向于忽略评论,因此,在您的情况下,每次创建一个新的字符串对象,因为字符串是不可变的。这将导致大量内存消耗,从而提高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();

}

与其他方法类似。

答案 1 :(得分:0)

在这种String用法中,您必须使用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();
}

答案 2 :(得分:0)

String类是不可变类,因此修改String需要更多的内存和放大器。 CPU使用率(重复工作时)。

对于此类操作,建议您使用StringBuilerStringBuffer类。

这两者都是可变类。因此,您可以对它们执行字符串操作。