我有一个AutoCompleteTextView,它已与SimpleCursorAdapter链接。一切正常,但是当用户输入不在数据库中的字符时,filter方法返回一个空游标。这会导致非致命的NullPointerException。我的代码是
mAdapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
String partial = null;
if(constraint!=null)
partial = constraint.toString();
Cursor result= dbHelper.readProductCategory(partial);
return result;
}
});
logcat中的警告
W/Filter﹕ An exception occured during performFiltering()!
java.lang.NullPointerException
at com.orderoapp.ordero.data.ProductDatabaseHelper.readProductCategory(ProductDatabaseHelper.java:70)
at com.orderoapp.ordero.OrdersFragment$1.runQuery(OrdersFragment.java:87)
at android.support.v4.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:397)
at android.support.v4.widget.CursorFilter.performFiltering(CursorFilter.java:50)
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)
我不知道在空光标的情况下该怎么做。我应该返回null吗?处理这个问题的最佳方法是什么。 此外,当用户删除AutoCompleteTextview中的文本时,我收到此错误
E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
有什么想法吗?我很乐意感谢你的帮助。感谢。
答案 0 :(得分:0)
错误是由
中的if语句引起的 ProductDatabaseHelper.readProductCategory
方法。 if条件是
if ( con.length() > 0 ) {
result = getReadableDatabase().query(ProductEntry.TABLE_NAME, projection,
....
}
因此,当con为null时,它会产生NullPointerException。解决方案非常简单。在检查con.length()> 0之前,只检查con是否为空。
if ( con!=null && con.length() > 0 ) {
...
}