Android for 循环中的 setText 以保存覆盖自身的 JsonObject 值
Android setText in for loop to hold JsonObject values overwriting itself
我已经摆弄了几个小时,基本上我想做的是创建一个 JsonObject 并在 for 循环中获取它的值并将其设置为 TextView。它正在工作但是我只得到第二个循环值,以澄清这是我的 JsonObject
的输出
{"Areas":[{"City":"Dallas","State":"Texas"},{"City":"Seattle","State":"Washington"}]}
但是我只得到 {"City":"Seattle","State":"Washington"} 中的第二个值在我的 Textviews setText 中循环。我想在我的 Textview 中获得第一个和第二个循环。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mystates);
try {
// Create my Json Array
JSONObject newJsonObject = new JSONObject();
JSONArray myarray = new JSONArray();
JSONObject states= new JSONObject();
states.put("City", "Dallas");
states.put("State", "Texas");
JSONObject states2= new JSONObject();
states2.put("City", "Seattle");
states2.put("State", "Washington");
myarray.put(states);
myarray.put(states2);
newJsonObject.put("Areas", array);
// Ends Json Array
//set Textviews
TextView citiess = (TextView)findViewById(R.id.citiess);
TextView statess = (TextView)findViewById(R.id.statess);
String cityString="";
String stateString="";
// retrieve Json Array and set For Loop
JSONArray jaLocalstreams = names.getJSONArray("Areas");
for(int position=0;position<jaLocalstreams.length();position++)
{
JSONObject JO = jaLocalstreams.getJSONObject(position);
cityString= JO.getString("City");
stateString = JO.getString("State");
citiess.setText(""+cityString);
statess.setText(""+stateString);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
我已经缩小了问题范围,我认为是这个
citiess.setText(""+cityString);
statess.setText(""+stateString);
setText 正在用最新的值替换值,这是有道理的,我怎样才能改变它以使其不那样做?当我把它放在 for 循环中时
System.err.println(cityString+","+stateString);
我得到了德克萨斯州达拉斯和华盛顿西雅图的两个循环值。这就是为什么我确定 setText 是问题所在,任何建议都会很棒。
似乎 cityString、stateString 在循环中被覆盖,setText 将打印最后一个值 only.Therfore 您需要在字符串中附加 json 值,然后在循环后将这些值设置为
for (int position = 0; position < jaLocalstreams.length(); position++) {
JSONObject JO = jaLocalstreams.getJSONObject(position);
cityString += JO.getString("City");
stateString += JO.getString("State");
}
citiess.setText("" + cityString);
statess.setText("" + stateString);
我已经摆弄了几个小时,基本上我想做的是创建一个 JsonObject 并在 for 循环中获取它的值并将其设置为 TextView。它正在工作但是我只得到第二个循环值,以澄清这是我的 JsonObject
的输出{"Areas":[{"City":"Dallas","State":"Texas"},{"City":"Seattle","State":"Washington"}]}
但是我只得到 {"City":"Seattle","State":"Washington"} 中的第二个值在我的 Textviews setText 中循环。我想在我的 Textview 中获得第一个和第二个循环。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mystates);
try {
// Create my Json Array
JSONObject newJsonObject = new JSONObject();
JSONArray myarray = new JSONArray();
JSONObject states= new JSONObject();
states.put("City", "Dallas");
states.put("State", "Texas");
JSONObject states2= new JSONObject();
states2.put("City", "Seattle");
states2.put("State", "Washington");
myarray.put(states);
myarray.put(states2);
newJsonObject.put("Areas", array);
// Ends Json Array
//set Textviews
TextView citiess = (TextView)findViewById(R.id.citiess);
TextView statess = (TextView)findViewById(R.id.statess);
String cityString="";
String stateString="";
// retrieve Json Array and set For Loop
JSONArray jaLocalstreams = names.getJSONArray("Areas");
for(int position=0;position<jaLocalstreams.length();position++)
{
JSONObject JO = jaLocalstreams.getJSONObject(position);
cityString= JO.getString("City");
stateString = JO.getString("State");
citiess.setText(""+cityString);
statess.setText(""+stateString);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
我已经缩小了问题范围,我认为是这个
citiess.setText(""+cityString);
statess.setText(""+stateString);
setText 正在用最新的值替换值,这是有道理的,我怎样才能改变它以使其不那样做?当我把它放在 for 循环中时
System.err.println(cityString+","+stateString);
我得到了德克萨斯州达拉斯和华盛顿西雅图的两个循环值。这就是为什么我确定 setText 是问题所在,任何建议都会很棒。
似乎 cityString、stateString 在循环中被覆盖,setText 将打印最后一个值 only.Therfore 您需要在字符串中附加 json 值,然后在循环后将这些值设置为
for (int position = 0; position < jaLocalstreams.length(); position++) {
JSONObject JO = jaLocalstreams.getJSONObject(position);
cityString += JO.getString("City");
stateString += JO.getString("State");
}
citiess.setText("" + cityString);
statess.setText("" + stateString);