ArrayList 在离开方法时不保留添加的元素

ArrayList not keeping added elements when it leaves method

我有一个 android 应用程序,我在其中调用 onCreate 中的一个方法,并在该方法中将对象添加到我的 ArrayList。当程序离开方法时,所有添加的元素都没有保存,我的 arraylist 大小为 0。谁能告诉我问题所在?

 private ArrayList<EventInformation> eventArray = new ArrayList<EventInformation>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTV = (TextView) findViewById(R.id.mTV);

    Long tsLong = System.currentTimeMillis()/1000;
    final String ts = tsLong.toString();
    //String hash = DigestUtils.md5Hex

    String url = "";

    RequestQueue queue = VolleySingleton.getInstance().getRequestQueue();

    JsonObjectRequest obj = new JsonObjectRequest
            (Request.Method.GET,
                    url,
                    null,
                    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            parseJSONResponse(response); // where I call the method
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            mTV.setText(ts);

        }
    });

    queue.add(obj);

    for (int i = 0; i < eventArray.size(); i++) {
        mTV.append("Id: " + String.valueOf(eventArray.get(i).id) + '\n' +
                "Title: " + eventArray.get(i).title + '\n' +
                "Description: " + eventArray.get(i).description + '\n');
    }

    display();

}

public void parseJSONResponse(JSONObject response) {

    try {
        JSONObject ar = response.getJSONObject("data");
        int total = ar.getInt("total");
        JSONArray arr = ar.getJSONArray("results");

        for (int i = 0; i < total; i++) {
            JSONObject currentObject = arr.getJSONObject(i);
            int id = currentObject.getInt("id");
            String title = currentObject.getString("title");
            String description = currentObject.getString("description");
            String resourceURI = currentObject.getString("resourceURI");
            EventInformation toAdd = new EventInformation(id, title, description, resourceURI);
            eventArray.add(toAdd); // successfully adds the object
            Log.i("tag", String.valueOf(eventArray.size())); //log shows size is 60+ here but after it leaves, it is 0
        }
    }
    catch (JSONException e) {

    }
}

我还尝试在我的 onCreate 内部和外部初始化 ArrayList。两者的结果相同

编辑:logcat:

02-11 21:47:46.451      685-685/kim.albert.marveleventtracker I/tag﹕ 1
02-11 21:47:46.451      685-685/kim.albert.marveleventtracker I/tag﹕ 2
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 3
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 4
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 5
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 6
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 7
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 8
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 9
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 10
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 11
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 12
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 13
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 14
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 15
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 16
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 17
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 18
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 19
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 20
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 21
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 22
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 23
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 24
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 25
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 26
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 27
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 28
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 29
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 30
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 31
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 32
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 33
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 34
02-11 21:47:46.461      685-685/kim.albert.marveleventtracker I/tag﹕ 35
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 36
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 37
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 38
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 39
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 40
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 41
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 42
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 43
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 44
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 45
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 46
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 47
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 48
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 49
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 50
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 51
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 52
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 53
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 54
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 55
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 56
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 57
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 58
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 59
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 60
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 61
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 62
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 63
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 64
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 65
02-11 21:47:46.471      685-685/kim.albert.marveleventtracker I/tag﹕ 66

您正在打印数组,然后再向其添加数据。

您的 JSON 请求代码不会等待请求完成。它说 "Hey, start this request now, and when it finishes give the results back to me (and when the results come back to you, you call parseJSONResponse to add them to the list)".

与此同时,当该请求发送到服务器(网络速度较慢)时,您打印列表的内容。

响应返回时,将元素添加到列表中。

下面的代码不会等待响应,而是直接执行,我的意思是它只会执行对服务器的请求,这意味着你的时间到了,它会开始执行下面的代码。

for (int i = 0; i < eventArray.size(); i++) {
     mTV.append("Id: " + String.valueOf(eventArray.get(i).id) + '\n' +
              "Title: " + eventArray.get(i).title + '\n' +
             "Description: " + eventArray.get(i).description + '\n');
 }

 display();

所以想法是,应该有一个条件来检查是否已成功收到响应!

最好的方法是创建一个方法并在 onResponse() 方法内部调用。