过滤ListView中的java.lang.NullPointerException

时间:2013-05-12 19:18:53

标签: android listview filter adapter

我正在尝试搜索过滤列表视图的搜索栏但是我在这行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);
        }
    }

3 个答案:

答案 0 :(得分:1)

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

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

在调用setProjects方法

之前,最好调用add方法

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您需要实例化filteredProjects。尝试更改

ProjectContainer filteredProjects = null;

ProjectContainer filteredProjects = new ProjectContainer();

您还要将此projects中的filteredProjects列表设置为null:

filteredProjects.setProjects(null);

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

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

如果你不完全确定它是什么,我可以推荐关于空值的this答案。