今天项目终于到了需要使用AutoCompleteTextView的情况,但是怎么也不能调出匹配的内容,然后发现它有报一个空指针的异常,所以考虑可能将空的字符串添加到了列表中了,报错如下:
09-20 17:11:08.586 28516-996/com.wbm.app.activity W/Filter: An exception occured during performFiltering()!
java.lang.NullPointerException
at android.widget.ArrayAdapter$ArrayFilter.performFiltering(ArrayAdapter.java:480)
at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
解决办法:
添加的时候使用StringUtils去判断只有非空的才能添加就行了:
/**更新自动匹配的数据列表*/
private void updateAutoCompleteList() {
autoCompleteNameList.clear();
autoCompleteAddressList.clear();
List<DispatchOrderShortInfor> all = DataSupport.findAll(DispatchOrderShortInfor.class);
for (int i = 0; i < all.size(); i++) {
DispatchOrderShortInfor shortInfor = all.get(i);
String address = shortInfor.getAddress();
String ownerName = shortInfor.getOwnerName();
//只有在列表中没有的时候才添加,不然会出现很多的相同的地址
if(!StringUtils.isEmpty(ownerName)&&!autoCompleteAddressList.contains(address))
autoCompleteAddressList.add(address);
if(!StringUtils.isEmpty(ownerName)&&!autoCompleteNameList.contains(ownerName))
autoCompleteNameList.add(ownerName);
}
mHandler.post(new Runnable() {
@Override
public void run() {
mAdapterForAutoCompleteAddress.notifyDataSetChanged();
mAdapterForAutoCompleteName.notifyDataSetChanged();
}
});
}