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