повторение данных в Listview после каждого вызова api

#android #listview #baseadapter

#Android #listview #базовый адаптер

Вопрос:

Я вызываю api для извлечения данных с сервера и заполнения данных в Listview с помощью адаптера, но данные удваиваются при каждом вызове api. т.е.: — при первом вызове api в списке отображаются данные, подобные.

 A
B
C
  

при втором вызове api список получает данные, подобные..

 A
B
C
A
B
C
  

вот мой фрагмент:

  String GetChatURL = RECEIVING_URL "receiptID=" userId "amp;senderID=" recepientID;

        StringRequest stringRequest = new StringRequest(Request.Method.GET, GetChatURL,
                new com.android.volley.Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        Log.d("respose valuee",response);

                        try {

                            JSONArray jsonArray = new JSONArray(response);

                            JSONObject jsonObject = new JSONObject();
                            JSONObject jsonObject1 = new JSONObject();
                            for(int i = 0;i<=jsonArray.length();i  ) {

                              final  ChatReceivingBean chatReceivingBean = new ChatReceivingBean();

                                jsonObject = jsonArray.getJSONObject(i);

                                chatReceivingBean.setMessageText(jsonObject.getString("MessageText"));
                                chatReceivingBean.setSenderID (jsonObject.getString ("senderID"));

                                chatArrayList.add (chatReceivingBean);
                                String id = chatReceivingBean.getSenderID ();

                                adapter = new ChatAdapter (getActivity(),chatArrayList,id);
                                messagesContainer.setAdapter(adapter);

                                   scroll();


                            }

                            Log.e("stringgggg  ",chatArrayList.toString ());

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


                    }
                },
                new com.android.volley.Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getActivity(),error.toString(),Toast.LENGTH_LONG ).show();
                    }
                })

        {


            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> map = new HashMap<String,String>();
                map.put(KEY_CHAT_RECEIVE_USERID,userId);
                map.put(KEY_CHAT_RECEIVE_SENDERID,recepientID);


                return map;
            }
        };

        try {
            RequestQueue requestQueue = Volley.newRequestQueue (getActivity ());
            requestQueue.add (stringRequest);
        }catch (Exception e){

        }
  

Вот класс адаптера:

  @Override
public View getView(int position, View convertView, ViewGroup parent) {

    sharedPreferences = context.getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);

    recepientID = sharedPreferences.getString("key_id",null);
    userId = sharedPreferences.getString("key_name",null);

    Log.d ("recepientID",recepientID);
    Log.d ("userId",userId);

    String iid = chatReceivingBeen.get (position).getSenderID ();

    View v=convertView;
    if(v==null)
    {

        if(chatReceivingBeen.get (position).getSenderID().equalsIgnoreCase(recepientID)){

            //v = View.inflate(cxt, R.layout.right, null);
            v= View.inflate (context, R.layout.list_item_chat_other,null);

        }else {
           // v = View.inflate(cxt, R.layout.left, null);
            v= View.inflate (context, R.layout.list_item_chat,null);
        }
    }

     txtMessage = (TextView)v.findViewById(R .id.txtMessage);

    if(chatReceivingBeen!=null) {

        // holder.txtMessage.setText (chatReceivingBeen.get (position).getMessageText ());
        txtMessage.setText (chatReceivingBeen.get (position).getMessageText ());
    }


    return v;
}
  

Ответ №1:

очистите chatArrayList перед добавлением к нему:

   StringRequest stringRequest = new StringRequest(Request.Method.GET, GetChatURL,
            new com.android.volley.Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    Log.d("respose valuee",response);

                    try {

                        //clear
                        chatArrayList.clear()
                        JSONArray jsonArray = new JSONArray(response);

                        JSONObject jsonObject = new JSONObject();
                        JSONObject jsonObject1 = new JSONObject();
                        ....