Recyclerview повторяется от Json - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение, которое содержит окно повторного просмотра, код работает правильно, но данные повторяются в списке, когда я хочу проанализировать Json в Android Studio, как я могу это исправить, когда данные поступают из Интернета, но когда я использую обычный ListViewон работает отлично, и я использую тот же адаптер

, и это мой код

private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerView_dAdapter;
public List<List_Item> listItems = new ArrayList<>();
private GridLayoutManager gridLayoutManager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    recyclerView = (RecyclerView) findViewById(R.id.m_RecyclerView);
    recyclerView.setHasFixedSize(true);

    gridLayoutManager = new GridLayoutManager(this, 1);
    recyclerView.setLayoutManager(gridLayoutManager);

    recyclerView_dAdapter = new RecyclerViewAdapter(listItems, this);
    recyclerView.setAdapter(recyclerView_dAdapter);

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

            if (gridLayoutManager.findLastCompletelyVisibleItemPosition() == listItems.size() - 1) {
                Get_All_Users(listItems.get(listItems.size()-1).getId());
            }

        }
    });

    Get_All_Users(0);
}

public void Get_All_Users(int limit) {
    CheckInternetConnection cic = new CheckInternetConnection(getApplicationContext());
    Boolean Ch = cic.isConnectingToInternet();
    if (!Ch) {
        Toast.makeText(this, R.string.no_internet_connection, Toast.LENGTH_SHORT).show();
    } else {

        StringRequest stringRequest = new StringRequest(Request.Method.GET,
                "https://raw.githubusercontent.com/abodali/ox/master/f.txt?limit" + limit

                 ,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {

                            JSONArray jsonArray = new JSONArray(response);
                            JSONObject jsonResponse = jsonArray.getJSONObject(0);
                            JSONArray jsonArray_usersS = jsonResponse.getJSONArray("All_storys");

                            for (int i = 0; i < jsonArray_usersS.length(); i++) {
                                JSONObject responsS = jsonArray_usersS.getJSONObject(i);

                                int id = responsS.getInt("id");
                                String story = responsS.getString("story_name");
                                String img_link = responsS.getString("img_link");

                                listItems.add(new List_Item(id, story, img_link));

                            }
                            recyclerView_dAdapter.notifyDataSetChanged();


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        RequestQueue queue = Volley.newRequestQueue(this);
        queue.add(stringRequest);
        stringRequest.setShouldCache(false);


    }
}

}

С уважением

1 Ответ

0 голосов
/ 23 мая 2018

Когда вы получаете новый ответ, вы не очищаете свой список перед добавлением новых данных.Я предполагаю, что это то, что вы хотите.

Поэтому перед вашим циклом for добавьте туда строку, которая очистит ваш список:

listItems.clear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...