java - 在 Android (java) 上解析 json 时出错

标签 java android json

我有一个具有以下格式的 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/

相关文章:

java - 当 ConnectTimeout 和 ReadTimeout 无限时出现 SocketTimeoutException?

Java/Android : getHostName() is always null with InetSocketAddress

java - 如何获取条码扫描仪android的 Activity 结果?

android - 如何为 Android 应用程序创建导览

java - 如何在 Jackson 的自定义解串器中调用默认解串器?

java - 寻找最近的2点

java 二维数组排序

java - JSON 解析,字符串到对象,("Can' t 将 JSON 对象转换为 JSON 数组”)

java - Android 写入文件时出现 NullPointerException

java - 如何建立到 FileZilla Server 1.2.0 的 FTPS 数据连接