Я использую NotifydataAdapter, но он не работает при изменении значения в базе данных; - PullRequest
0 голосов
/ 06 мая 2019

Я получаю данные с сервера как json.Все работает, но notifyDataSetChanged не работает.

BackGroundTask backGroundtask = new BackGroundtask();
backGroundTask.execute(arrayList);

private class BackGroundWorkeroneSignup extends AsyncTask<List<CheckingDTO>,CheckingDTO, CheckingDTO> {
    @Override
    public void onResponse(JSONObject response) {

        CheckingDTO check = new CheckingDTO(email_c+"=="+pass_c,email_c,pass_c,email_c,pass_c);
        arrayList.add(checkingDTO);

        adapterActivity = new HistoryAdapter(arrayList);
        recyclerView.setAdapter(adapterActivity);

    @Override
    protected void onPostExecute(CheckingDTO data) {

        super.onPostExecute(data);
        arrayList.clear();

        List<CheckingDTO> list = new ArrayList<>();
        list.add(data);
        adapterActivity = new HistoryAdapter(list);
        adapterActivity.notifyDataSetChanged();
    }

1 Ответ

0 голосов
/ 06 мая 2019

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

метод создания

        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
        adapterActivity = new HistoryAdapter(arrayList);
        recyclerView.setAdapter(adapterActivity);
        backGroundWorkeroneSignup = new BackGroundWorkeroneSignup();
        backGroundWorkeroneSignup.execute(arrayList);

метод фона:

 try {
                        JSONArray jsonArray = response.getJSONArray("get_request");// this is your array containing data

                        for (int i=0;i<jsonArray.length();i++) {
                            JSONObject jobj = jsonArray.getJSONObject(i);

                            String id = jobj.getString("id");

                                String email_c =jobj.getString("pick_lat");
                                String pass_c = jobj.getString("pick_lon");

                                checkingDTO = new CheckingDTO(email_c+"=="+pass_c,email_c,pass_c,email_c,pass_c);

                                CheckingDTO check = new CheckingDTO(email_c+"=="+pass_c,email_c,pass_c,email_c,pass_c);
                                arrayList.add(check);
                        }
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

в PostExecute

  adapterActivity.notifyDataSetChanged();

В первой части Обратите внимание на recyclerView.setAdapter (adapterActivity);

В фоновом режиме:

  1. при цикле в массиве всегда помните: индекс начинается с 0, поэтому он всегда меньше размера массива, например for (int i=0;i<jsonArray.length();i++)
  2. Вы должны всегда создавать новый объект класса Model в цикле for, а затем добавлять его в цикле.Нет необходимости вызывать notifydatasetchange в цикле.

В onPostExecute: мы вызываем notifydatasetchanged только потому, что мы уже добавили все элементы в список.

Надеюсь, что это объяснит все ваши запросы.дайте мне знать, если у вас есть путаница в любом случае

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