我有一个具有以下格式的 JSON 对象:
{
"_id": "1",
"trips": [{
"origin": "Spain",
"destination": "France"
}, {
"origin": "Italy",
"destination": "Germany"
}, {
"origin": "Portugal",
"destination": "Ireland"
}]
}
我的目标是解析这个 JSON 并获取 Trip 的 ArrayList,为此我有以下代码:
class Trip {
String origin;
String destination;
}
ArrayList<Trip> tripList;
public ArrayList<Trip> getTripList(String json){
Trip thisTrip = new Trip();
ArrayList<Trip> thisTripList = new ArrayList<Trip>();
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray tripArray = jsonObject.getJSONArray("trips");
for(int i = 0; i < tripArray.length(); i++){
JSONObject tripInstance = tripArray.getJSONObject(i);
thisTrip.origin = tripInstance.getString("origin");
thisTrip.destination = tripInstance.getString("destination");
thisTripList.add(thisTrip);
}
return(thisTripList);
} catch (JSONException e) {
e.printStackTrace();
return(null);
}
}
但是,当我执行如下所示的此方法时,我得到一个大小为 3 的 ArrayList,这是正确的,但所有起点/目的地值都相同(即葡萄牙、葡萄牙、葡萄牙;爱尔兰、爱尔兰、爱尔兰)。我做错了什么?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//...
Trip trip = new Trip();
tripList = new ArrayList<Trip>();
tripList = getTripList(json);
//...
最佳答案
您在每个循环中使用相同的 Trip 对象。因此,同一个对象在 arrayList 中被引用了 3 次。这就是为什么所有 3 个对象的数据都相同的原因。请尝试以下代码:-
Trip.java
public class Trip {
String origin;
String destination;
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
}
In your activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
ArrayList<Trip> tripList = new ArrayList<Trip>();
tripList = getTripList(json);
Log.e("Trips", "" + tripList.size());
}
public ArrayList<Trip> getTripList(String json) {
ArrayList<Trip> thisTripList = new ArrayList<Trip>();
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray tripArray = jsonObject.getJSONArray("trips");
for (int i = 0; i < tripArray.length(); i++) {
Trip trip = new Trip();
trip.setOrigin(tripArray.getJSONObject(i).getString("origin"));
trip.setDestination(tripArray.getJSONObject(i).getString("destination"));
thisTripList.add(trip);
}
return (thisTripList);
} catch (JSONException e) {
e.printStackTrace();
return (null);
}
}
关于java - 在 Android (java) 上解析 json 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40757391/