android搜索建议或内容提供商

时间:2015-08-11 16:22:59

标签: android sqlite android-contentprovider

我在我的Android应用中实现了搜索建议。 它工作正常,除非它有时抛出异常

08-11 21:32:33.970  13650-13659/com.india.india E/System﹕ Uncaught exception thrown by finalizer
08-11 21:32:33.980  13650-13659/com.india.india E/System﹕ java.lang.IllegalStateException: Don't have database lock!
            at android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2090)
            at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2182)
            at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2178)
            at android.util.LruCache.trimToSize(LruCache.java:197)
            at android.util.LruCache.evictAll(LruCache.java:285)
            at android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2143)
            at android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDatabase.java:1126)
            at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:1914)
            at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182)
            at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
            at java.lang.Thread.run(Thread.java:856)
08-11 21:32:33.980  13650-13659/com.india.india E/SQLiteDatabase﹕ close() was never explicitly called on database '/data/data/com.india.india/databases/SuggestionDB.db'
    android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
            at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1943)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
            at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051)
            at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:770)
            at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
            at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:231)
            at com.india.india.SearchSuggester.query(SearchSuggester.java:25)
            at android.content.ContentProvider$Transport.query(ContentProvider.java:178)
            at android.content.ContentResolver.query(ContentResolver.java:311)
            at android.app.SearchManager.getSuggestions(SearchManager.java:827)
            at android.widget.SuggestionsAdapter.runQueryOnBackgroundThread(SuggestionsAdapter.java:190)
            at android.widget.CursorFilter.performFiltering(CursorFilter.java:49)
            at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)

以下是我的权限ContentProvider query()方法

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        if(selectionArgs!=null && selectionArgs.length>0 && selectionArgs[0]!=null)
        {
            String catName=selectionArgs[0];
            SQLiteIntegrator sqLiteIntegrator=new SQLiteIntegrator(getContext());
            SQLiteDatabase database=sqLiteIntegrator.getReadableDatabase();
            String searchQuery="Select cat_id as _id , cat_name as "+ SearchManager.SUGGEST_COLUMN_TEXT_1+" ,cat_id as "+SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA+" from CatSuggestion where UPPER(cat_name) like '"+catName.toUpperCase()+"%' OR UPPER(cat_name) like '% "+catName.toUpperCase()+"%' LIMIT 8";
            Cursor c=database.rawQuery(searchQuery, null);
            if(c.getCount()>0) {
                c.moveToFirst();
            }
            return c;
        }
        else {
            return null;
        }
    }

请告诉我我做错了什么。

0 个答案:

没有答案