Android LazyAdapter处的NullPointerException
我试图通过创建一个自定义过滤器来对LazyAdapter类执行搜索。但当我试图使用TextWatcher执行搜索时,应用程序正在强制关闭。 LazyAdapter类的代码如下所示: 包com.demo.directory; 公共类LazyAdapter扩展了BaseAdapter{Android LazyAdapter处的NullPointerException,android,android-listview,Android,Android Listview,我试图通过创建一个自定义过滤器来对LazyAdapter类执行搜索。但当我试图使用TextWatcher执行搜索时,应用程序正在强制关闭。 LazyAdapter类的代码如下所示: 包com.demo.directory; 公共类LazyAdapter扩展了BaseAdapter{ private Activity activity; private ArrayList<HashMap<String, String>> data; private static Layou
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public View getFilter(CharSequence seq, View convertView) {
String name_org;
View vi = convertView;
convertView = null;
if (convertView == null)
vi = inflater.inflate(R.layout.list_row, null);
TextView name = (TextView) vi.findViewById(R.id.name_org); // title
TextView address = (TextView) vi.findViewById(R.id.address_org); // artist
// name
ImageView thumb_image = (ImageView) vi.findViewById(R.id.list_image); // thumb
// image
for (int i = 0; i < data.size(); i++) {
HashMap<String, String> org = new HashMap<String, String>();
org = data.get(i);
name_org = org.get(OrganizationActivity.KEY_NAME);
if (name_org != null && seq != null) {
if (name_org.contains(seq)) {
name.setText(org.get(OrganizationActivity.KEY_NAME));
address.setText(org.get(OrganizationActivity.KEY_CITY)
+ ", " + org.get(OrganizationActivity.KEY_STATE));
imageLoader.DisplayImage(
org.get(OrganizationActivity.KEY_IMAGE_URL),
thumb_image);
notifyDataSetChanged();
} else {
org.remove(OrganizationActivity.KEY_NAME);
}
}
}
return vi;
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.list_row, null);
TextView name = (TextView) vi.findViewById(R.id.name_org); // title
TextView address = (TextView) vi.findViewById(R.id.address_org); // artist
// name
ImageView thumb_image = (ImageView) vi.findViewById(R.id.list_image); // thumb
// image
HashMap<String, String> org = new HashMap<String, String>();
org = data.get(position);
// Setting all values in listview
name.setText(org.get(OrganizationActivity.KEY_NAME));
address.setText(org.get(OrganizationActivity.KEY_CITY) + ", "
+ org.get(OrganizationActivity.KEY_STATE));
imageLoader.DisplayImage(org.get(OrganizationActivity.KEY_IMAGE_URL),
thumb_image);
return vi;
}
}
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共图像加载器;
公共LazyAdapter(活动a,ArrayList d){
活动=a;
数据=d;
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
公共视图getFilter(CharSequence seq,View convertView){
字符串名称\组织;
视图vi=转换视图;
convertView=null;
if(convertView==null)
vi=充气机充气(R.layout.list_行,空);
TextView name=(TextView)vi.findviewbyd(R.id.name_org);//title
TextView地址=(TextView)vi.findViewById(R.id.address_org);//艺术家
//名字
ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image);//thumb
//形象
对于(int i=0;i
上面的代码现在正在工作,但如果我删除搜索数据,它不会显示任何内容,即,如果搜索后清除EditText数据,则不会返回ListView的原始数据。您确定您的
名称\u org
和s
变量不为null
你必须先检查一下,比如
if(name_org != null && s != null)
{
if(name_org.contains(s))
{
// Your other stuff goes here...
.
.
}
}
您确定您的
name\u org
和s
变量不是null
你必须先检查一下,比如
if(name_org != null && s != null)
{
if(name_org.contains(s))
{
// Your other stuff goes here...
.
.
}
}
我想s是空的,你检查过了吗。因为contains方法会抛出NPE,即使您传递的charsequence为null,我认为s为null,您检查过了吗。因为contains方法即使您传递的charsequence为null也会抛出NPE,以便在清除search edittext后保留数据项,所以下面的代码很有用。希望这对你有帮助
public Filter getFilter()
{
Filter filter = new Filter()
{
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
System.out.println(" --- constraint in publishResults --- "+constraint+" - results - "+results);
itemDetailList = (List<Dish>)results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults filterResults = new FilterResults();
List<Dish> filtered_list = new ArrayList<Dish>();
if(originalItemsDetails == null)
{
System.out.println(" --- originalItemsDetails IS NULL --- ");
originalItemsDetails = new ArrayList<Dish>(itemDetailList);
}
else
{
System.out.println(" --- originalItemsDetails NOT NULL --- ");
}
if(constraint == null || constraint.length() == 0)
{
filterResults.count = originalItemsDetails.size();
filterResults.values = originalItemsDetails;
}
else
{
constraint = constraint.toString().toLowerCase();
for(int i=0; i<originalItemsDetails.size(); i++)
{
String dataNames = originalItemsDetails.get(i).getDishName().toLowerCase();
if(dataNames.startsWith(constraint.toString()))
{
filtered_list.add(originalItemsDetails.get(i));
}
}
filterResults.count = filtered_list.size();
System.out.println(" --- filterResults.count --- "+filterResults.count);
filterResults.values = filtered_list;
System.out.println(" --- filterResults.values --- "+filterResults.values);
}
System.out.println(" --- constraint in performFiltering --- "+constraint);
return filterResults;
}
};
return filter;
}
公共过滤器getFilter()
{
过滤器过滤器=新过滤器()
{
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果)
{
System.out.println(“--publishResults中的约束----“+constraint+”-results-“+results”);
itemDetailList=(List)results.values;
notifyDataSetChanged();
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束)
{
FilterResults FilterResults=新的FilterResults();
List filtered_List=new ArrayList();
if(originalItemsDetails==null)
{
System.out.println(“--originalItemsDetails为空--”);
originalItemsDetails=新的ArrayList(itemDetailList);
}
其他的
{
System.out.println(“--originalItemsDetails NOT NULL--”;
}
if(constraint==null | | constraint.length()==0)
{
filterResults.count=originalItemsDetails.size();
filterResults.values=原始数据详细信息;
}
其他的
{
constraint=constraint.toString().toLowerCase();
对于(int i=0;i在清除search edittext后保留数据项,下面的代码很有用。希望这对您有所帮助
public Filter getFilter()
{
Filter filter = new Filter()
{
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
System.out.println(" --- constraint in publishResults --- "+constraint+" - results - "+results);
itemDetailList = (List<Dish>)results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults filterResults = new FilterResults();
List<Dish> filtered_list = new ArrayList<Dish>();
if(originalItemsDetails == null)
{
System.out.println(" --- originalItemsDetails IS NULL --- ");
originalItemsDetails = new ArrayList<Dish>(itemDetailList);
}
else
{
System.out.println(" --- originalItemsDetails NOT NULL --- ");
}
if(constraint == null || constraint.length() == 0)
{
filterResults.count = originalItemsDetails.size();
filterResults.values = originalItemsDetails;
}
else
{
constraint = constraint.toString().toLowerCase();
for(int i=0; i<originalItemsDetails.size(); i++)
{
String dataNames = originalItemsDetails.get(i).getDishName().toLowerCase();
if(dataNames.startsWith(constraint.toString()))
{
filtered_list.add(originalItemsDetails.get(i));
}
}
filterResults.count = filtered_list.size();
System.out.println(" --- filterResults.count --- "+filterResults.count);
filterResults.values = filtered_list;
System.out.println(" --- filterResults.values --- "+filterResults.values);
}
System.out.println(" --- constraint in performFiltering --- "+constraint);
return filterResults;
}
};
return filter;
}
公共过滤器getFilter()
{
过滤器过滤器=新过滤器()
{
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果)
{
System.out.println(“--publishResults中的约束----“+constraint+”-results-“+results”);
我