繁体   English   中英

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请求代码不会等待请求完成。 它说:“嘿,现在就开始这个请求,当它结束时将结果返回给我(当结果返回给你时,你调用parseJSONResponse将它们添加到列表中)”。

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

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

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

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()方法中创建一个方法并调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM