0

我正在尝试做一个过滤列表视图的搜索栏但是我在这一行中遇到了这个错误,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);
        }
    }
4

3 回答 3

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

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

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

于 2013-05-12T19:21:10.787 回答
1

您没有在上面的代码片段中调用 setProjects,只是定义它。因此,根据语言定义,未初始化的对象为 null,并且在尝试访问时会抛出NullPointerException 。

于 2013-05-12T19:22:19.600 回答
1

您需要实例化filteredProjects. 尝试改变

ProjectContainer filteredProjects = null;

ProjectContainer filteredProjects = new ProjectContainer();

您还在这一行将projects列表设置为 null:filteredProjects

filteredProjects.setProjects(null);

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

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

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

于 2013-05-12T20:30:37.503 回答