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