Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList离开方法时不保留添加的元素_Java_Android_Arraylist - Fatal编程技术网

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

Java ArrayList离开方法时不保留添加的元素,java,android,arraylist,Java,Android,Arraylist,我有一个android应用程序,我在onCreate中调用一个方法,并在该方法中向ArrayList添加对象。当程序离开该方法时,所有添加的元素都不会保存,并且我的arraylist大小为0。谁能告诉我这个问题吗 private ArrayList<EventInformation> eventArray = new ArrayList<EventInformation>(); @Override protected void onCreate(Bundle save

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

    }
}

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

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方法内调用。

@RandykaYudhistira posted在请求完成后如何调用该方法?在请求完成后调用哪个方法?parseJSONResponse。或者有没有一种方法可以在执行更多代码行之前等待请求完成?在请求完成后调用parseJSONResponse是您已经做过的事情。库不确定它到底是什么,一旦得到响应,它就会在ResponseListener中调用void onResponseJSONObject响应方法。如果在for循环之前有一个If语句,但是请求之后的代码行被调用,那么它不会返回false吗?还有,if语句是什么?在执行更多行代码之前,有没有办法等待请求完成?@fredjones我的意思是在某个地方实现一个条件代码机制,根据成功/错误响应到达,它将开始进一步执行!你能给我一个这样一个条件代码的例子,以及在程序中的什么地方实现它吗?
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();