如何正确刷新 Listview(排球)?

How to refresh Listview (Volley) correctlly?

我使用 Volley 从服务器加载数据,但如果我尝试刷新(重新加载)数据,我的 Listview 会出现双倍的问题。如果我快速点击 Button 5 次,我将获得 5 次数据。

如何在开始新的刷新之前停止第一次加载?

这就是我有时会收到此错误的原因: 致命异常:主要 进程:com.project1.proj,PID:19495 java.lang.IndexOutOfBoundsException:索引:25,大小:0

    public void Load_data(View view) {  
Load_data();
} 

public void Load_data() {

        URL="http://myweb.com/data.php;

        listItems_001.clear();  // empty the old data
        requestQueue = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        // textView.setText("");
                        try {
                            JSONArray jsonArray = response.getJSONArray("all_data");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject respons = jsonArray.getJSONObject(i);
                                // String id = respons.getString("id") + "*";
                                String id = respons.getString("id");
                                name = respons.getString("name");

listItems_001.add(new listItems(id, name)); 

                                int request_id = Integer.valueOf(id);
                                 if(request_id > id_last_request){
                                     id_request_now=request_id;

                                }
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }


                        listAllIteme_001(); // step 10
                        if (listView.getAdapter().getCount() == 0) {

                            textView.setVisibility(View.VISIBLE);
                            listView.setEmptyView(textView);

                            Toast.makeText(Ordered_Taxi_Driver.this,"No Message found ", Toast.LENGTH_LONG).show();
                            ly_progressbar_load.setVisibility(View.GONE);

                        }else{
                            Toast.makeText(Ordered_Taxi_Driver.this,"Total Items =  "+listView.getAdapter().getCount(), Toast.LENGTH_LONG).show();

                            textView.setVisibility(View.GONE);

                        }



                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", "ERROR");
            }
        }

        );
        requestQueue.add(jsonObjectRequest);


    }

试试这个。它将首先加载,然后开始新的刷新停止。

public void Load_data(View view) {  
        Load_data();
        } 

    boolean mIsRequest = false;

        public void Load_data() {
        if(mIsRequest)
            return;
        mIsRequest= true;
                URL="http://myweb.com/data.php;

                listItems_001.clear();  // empty the old data
                requestQueue = Volley.newRequestQueue(this);
                JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL,
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                mIsRequest = false;
                                // textView.setText("");
                                try {
                                    JSONArray jsonArray = response.getJSONArray("all_data");

                                    for (int i = 0; i < jsonArray.length(); i++) {
                                        JSONObject respons = jsonArray.getJSONObject(i);
                                        // String id = respons.getString("id") + "*";
                                        String id = respons.getString("id");
                                        name = respons.getString("name");

        listItems_001.add(new listItems(id, name)); 

                                        int request_id = Integer.valueOf(id);
                                         if(request_id > id_last_request){
                                             id_request_now=request_id;

                                        }
                                    }

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }


                                listAllIteme_001(); // step 10
                                if (listView.getAdapter().getCount() == 0) {

                                    textView.setVisibility(View.VISIBLE);
                                    listView.setEmptyView(textView);

                                    Toast.makeText(Ordered_Taxi_Driver.this,"No Message found ", Toast.LENGTH_LONG).show();
                                    ly_progressbar_load.setVisibility(View.GONE);

                                }else{
                                    Toast.makeText(Ordered_Taxi_Driver.this,"Total Items =  "+listView.getAdapter().getCount(), Toast.LENGTH_LONG).show();

                                    textView.setVisibility(View.GONE);

                                }



                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                         mIsRequest = false;
                        Log.e("VOLLEY", "ERROR");
                    }
                }

                );
                requestQueue.add(jsonObjectRequest);


            }