Android开发问题:从JSON读取经纬度到TextView仅显示最后一条记录
解决TextView仅显示最后一条经纬度记录的问题
嘿,我来帮你搞定这个小问题!你现在遇到的情况,核心原因是每次循环都直接用setText()覆盖了TextView的原有内容,而不是把新的经纬度记录追加进去——毕竟setText()的作用是替换掉TextView里的所有内容,不是在后面加东西。
问题分析
假设你原来的代码大概是这样的(模拟常见的错误写法):
// 解析JSON数组 JSONArray jsonArray = new JSONArray(你的JSON字符串); for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); String latitude = item.getString("latitude"); String longitude = item.getString("longitude"); // 这里每次都会把之前的内容覆盖,最后只剩最后一条 yourTextView.setText(latitude + "|" + longitude); }
解决方案:先累加内容,再一次性设置
我们需要先把所有经纬度记录拼接成一个完整的字符串,最后再设置给TextView。推荐用StringBuilder来做拼接,效率更高(尤其是数据量大的时候):
// 1. 初始化一个StringBuilder用来累加内容 StringBuilder locationBuilder = new StringBuilder(); JSONArray jsonArray = new JSONArray(你的JSON字符串); // 2. 遍历JSON数组,拼接每一条记录 for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); String lat = item.getString("latitude"); String lng = item.getString("longitude"); // 拼接当前的经纬度,格式为「纬度|经度」 locationBuilder.append(lat).append("|").append(lng); // 如果不是最后一条记录,可以加个换行(或者你想要的分隔符),让内容更易读 if (i != jsonArray.length() - 1) { locationBuilder.append("\n"); } } // 3. 最后把拼接好的完整字符串设置给TextView yourTextView.setText(locationBuilder.toString());
额外说明
- 如果你希望所有记录在一行显示,用
|分隔每条(比如lat1|lng1|lat2|lng2),可以把换行换成|,不过记得最后要去掉多余的分隔符,比如用locationBuilder.deleteCharAt(locationBuilder.length() - 1)来移除最后一个|。 - 如果数据量很小,用普通String拼接也可以,但
StringBuilder是更优的选择,因为String是不可变对象,每次拼接都会生成新的对象,浪费内存。
内容的提问来源于stack exchange,提问作者Matheo Espitia
相关产品推荐
相关产品推荐

