带有SimpleCursorAdapter的AutoCompleteTextView在过滤

时间:2015-07-08 20:26:11

标签: android android-sqlite simplecursoradapter autocompletetextview

我有一个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

有什么想法吗?我很乐意感谢你的帮助。感谢。

1 个答案:

答案 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 ) {
...
    }