我正在使用NotifydataAdapter,但是当数据库中的值更改时它不起作用;

时间:2019-05-06 10:03:09

标签: java android android-asynctask

我正在从服务器获取数据作为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 :(得分:0)

我正在通过电子邮件发送您发送给您的相关代码。

oncreate方法

        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. 在Array中循环时,请切记:索引从0开始,因此它总是小于数组的大小,即for (int i=0;i<jsonArray.length();i++)
  2. 您应该始终为循环创建Model类的新对象,然后将其添加到循环中。无需在循环中调用notifydatasetchanged。

在onPostExecute中:我们仅在已添加列表中的所有元素之后才调用notifydatasetchanged。

希望可以解释您的所有查询。让我知道您是否有任何困惑