java - 我正在使用 NotifydataAdapter 但当数据库上的值更改时它不起作用;

标签 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();
    }

最佳答案

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

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();
                    }

执行后

  adapterActivity.notifyDataSetChanged();

在第一部分中,请注意recyclerView.setAdapter(adapterActivity);

在后台模式:

  1. 当你在数组中循环时,永远记住:索引从 0 开始,因此它总是小于数组的大小,即 for (int i=0;i<jsonArray.length();i++)
  2. 您应该始终在 for 循环中创建 Model 类的新对象,然后将其添加到循环中。无需在循环中调用notifydatasetchanged。

在onPostExecute中:我们调用notifydatasetchanged只是因为我们已经添加了列表中的所有元素。

希望这能解释您的所有疑问。如果您在任何情况下都感到困惑,请告诉我

关于java - 我正在使用 NotifydataAdapter 但当数据库上的值更改时它不起作用;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56002934/

相关文章:

android - VideoView 不填充布局

android - 我如何等待 OnPostExecute 在 Android 中完成?

java - Spring 3.0错误: The matching wildcard is strict,但找不到元素的声明

java - 如何遍历对象数组列表

Java OO 设计 : a Person can be either Singer, 钢琴家或两者

java - 在 Spring 的情况下,我应该继承什么类来创建数据库集成测试?

android - 通用图像加载器从 Internet 重新缓存

java - 在ArToolkit的android java SDK中查找ArMarker和相机之间的距离

java - 在 Android 后台下载 Facebook 图像

java - 使用 AsyncTaskLoader 和 CursorAdapter 执行网络任务?