【问题标题】:java.lang.NullPointerException in Filtering a ListView过滤 ListView 中的 java.lang.NullPointerException
【发布时间】:2013-05-13 04:30:37
【问题描述】:

我正在尝试做一个过滤列表视图的搜索栏但是我在filteredProjects.add(container.getProjects().get(i)); 这一行中遇到了这个错误,我不知道为什么?知道问题可能是什么吗?感谢您的帮助,我将不胜感激。

    Gson gson = new GsonBuilder().setDateFormat(
            "yyyy-MM-dd'T'HH:mm:ssZ").create();

    final ProjectContainer container = gson.fromJson(resultat,
            ProjectContainer.class);
    final ListView lv = (ListView) findViewById(R.id.list);

    /**
     * Updating parsed JSON data into ListView
     * */
    adaptateur = new ProjectAdapter(ProjectActivity.this,
            R.layout.ligne_project, container);

    lv.setAdapter(adaptateur);

    // setListAdapter(adaptateur);
    // Search EditText
    EditText inputSearch;
    inputSearch = (EditText) findViewById(R.id.inputSearch);
    /**
     * Enabling Search Filter
     * */
    inputSearch.addTextChangedListener(new TextWatcher() {

        @SuppressWarnings("null")
        @Override
        public void onTextChanged(CharSequence s, int arg1, int arg2,
                int arg3) {
            ProjectContainer filteredProjects = null;

            if (!s.toString().equals("")) {
                for (int i = 0; i < container.getProjects().size(); i++) {
                    if (container.getProjects().get(i)
                            .getAbbreviation().toString().contains(s)) {
                        filteredProjects.setProjects(null);
                        filteredProjects.add(container.getProjects()
                                .get(i));
                    }
                }
                adaptateur = new ProjectAdapter(ProjectActivity.this,
                        R.layout.ligne_project, filteredProjects);

                lv.setAdapter(adaptateur);
            } else {
                adaptateur = new ProjectAdapter(ProjectActivity.this,
                        R.layout.ligne_project, container);
                lv.setAdapter(adaptateur);
            }

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });

这是我的 ProjectContainer.class :

import java.util.List;

import com.google.gson.annotations.SerializedName;

    public class ProjectContainer {
        @SerializedName("project")
        List<Project> projects;

        public List<Project> getProjects() {
            return projects;
        }

        public void setProjects(List<Project> projects) {
            this.projects = projects;
        }

        public void add(Project project) {
            projects.add(project);
        }
    }

【问题讨论】:

    标签: android listview filter adapter


    【解决方案1】:

    你需要实例化filteredProjects。尝试改变

    ProjectContainer filteredProjects = null;
    

    ProjectContainer filteredProjects = new ProjectContainer();
    

    您还在这一行将filteredProjects 中的projects 列表设置为空:

    filteredProjects.setProjects(null);
    

    当您调用filteredProjects.add(..) 时,这将导致NullPointerException。您需要分配一个新的 listm 而不是 null。

    filteredProjects.setProjects(new List<Project>());
    

    如果您不完全确定它是什么,我可以推荐this 回答有关空值的问题。

    【讨论】:

      【解决方案2】:
        public void add(Project project) {
              projects.add(project);
          }
      

      在上述行中,您使用了未初始化的实例projects

      所以最好在调用add 方法之前调用setProjects 方法

      【讨论】:

      • 感谢您的回复,但我更新了我的问题并在调用 add 方法之前调用了 setProjects 方法,但在此行中出现 java.lang.NullPointerException 过滤项目.setProjects(null);
      【解决方案3】:

      您没有在上面的代码 sn-p 中调用 setProjects,只是定义它。因此,根据language definition,未初始化的对象为空,并且在尝试访问时会抛出NullPointerException

      【讨论】:

        猜你喜欢
        • 2020-10-08
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 2022-01-03
        • 1970-01-01
        • 2011-10-17
        相关资源
        最近更新 更多