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

时间:2015-02-12 02:38:29

标签: java android arraylist

我有一个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

2 个答案:

答案 0 :(得分:0)

在向阵列添加数据之前,您正在打印阵列。

您的JSON请求代码不会等待请求完成。它说:“嘿,现在就开始这个请求,当它结束时将结果发回给我(当结果回到你身边时,你打电话给parseJSONResponse将它们添加到列表中)”。

与此同时,当该请求进入服务器(网络速度很慢)时,您将打印列表中的内容。

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

答案 1 :(得分:0)

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

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();

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

OR

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