我有一个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
答案 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()
方法内调用。