Komang Putra Ответов: 1

Обновление данных при изменении строки


мне нужна помощь, чтобы исправить эту ошибку, я хочу изменить данные listview, если строка изменена
вот мой код
private void absensi() {
        sharedPreferences = getSharedPreferences("user_details", MODE_PRIVATE);
        String nik_baru = sharedPreferences.getString(KEY_NIK ,null);

        String awal = tanggalawal.getText().toString().trim();
        String akhir = tanggalakhir.getText().toString().trim();

        pDialog = new ProgressDialog(kehadiran.this);
        showDialog();
        pDialog.setContentView(R.layout.progress_dialog);
        pDialog.getWindow().setBackgroundDrawableResource(
                android.R.color.transparent
        );

        StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://example/rest_server/api/absensi/index?shift_day="+ awal +"&shift_day_2=" + akhir + "&badgenumber=" + nik_baru,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONObject obj = new JSONObject(response);
                            final JSONArray movieArray = obj.getJSONArray("data");
                            for (int i = 0; i < movieArray.length(); i++) {
                                final JSONObject movieObject = movieArray.getJSONObject(i);
                                final keteranganmodel movieItem = new keteranganmodel(
                                        movieObject.getString("shift_day"),
                                        movieObject.getString("F1"),
                                        movieObject.getString("depo_f1"),
                                        movieObject.getString("F4"),
                                        movieObject.getString("depo_f4"),
                                        movieObject.getString("ket_absensi"),
                                        movieObject.getString("name"));
                                movieItemList.add(movieItem);
                                hideDialog();

                                final ListViewAdapter adapter = new ListViewAdapter(movieItemList, getApplicationContext());
                                list.setAdapter(adapter);
                                Collections.reverse(movieItemList);

                                adapter.notifyDataSetChanged();

                                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                                    @Override
                                    public boolean onQueryTextChange(String nextText) {
                                        adapter.getFilter().filter(nextText);
                                        return false;
                                    }

                                    @Override
                                    public boolean onQueryTextSubmit(String query) {
                                        return false;
                                    }
                                });
                            }


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

                            }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Maaf, anda belum pernah absen", Toast.LENGTH_SHORT).show();
                    }
                });


        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }


Что я уже пробовал:

в этом коде...
пример:
2020-11-10 с/д 2020-11-15
из положить будет
2020-11-10
2020-11-11
2020-11-12
2020-11-13
2020-11-14
2020-11-15

но вывод, когда я меняю строку, таков:
2020-11-10
2020-11-11
2020-11-12
2020-11-13
2020-11-14
2020-11-15
2020-11-10
2020-11-11
2020-11-12
2020-11-13
2020-11-14
2020-11-15

wseng

вы хотите сказать, что получаете дубликаты данных?

Komang Putra

да, верно, что это

wseng

Проверьте ответ Ричарда.

1 Ответов

Рейтинг:
9

Richard Deeming

Каждый раз, когда ваш код выполняется, вы добавляете элементы в movieItemList Но вы никогда не очищаете этот список и никогда не удаляете из него элементы. Вы просто продолжите добавлять результаты текущего запроса к результатам всех предыдущих запросов.

Попробуйте очистить список перед вашим for петля.