2011-11-26 13 views
7

Parece que no puedo encontrar ningún buen código de ejemplo de cómo consultar el proveedor de contenido UserDictionary con una palabra. Mi consulta es así:¿Cómo consultar el proveedor de contenido UserDictionary en Android?

Cursor cur = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI, 
    new String[] {Words._ID, Words.WORD}, 
    Words.WORD + "=?", 
    new String[] {"test"}, 
    null); 

He intentado tampoco especificando una consulta, así que no especificar una proyección y el cursor está siempre vacío. He incluido android.permission.READ_USER_DICTIONARY en mi manifiesto.

+0

Si "prueba" no está en la UserDictionary, entonces eso sería hacer que el cursor vacío. – Suragch

Respuesta

1

probar este

final String[] QUERY_PROJECTION = { 
    UserDictionary.Words._ID, 
    UserDictionary.Words.WORD 
}; 
Cursor cursor = getContentResolver() 
      .query(UserDictionary.Words.CONTENT_URI, QUERY_PROJECTION, "(locale IS NULL) or (locale=?)", 
      new String[] { Locale.getDefault().toString() }, null); 

no he probado esto, sólo una sugerencia

0

Condición previa: Asegúrate de que tienes las palabras adecuadas en UserDictionary en
Settings ->Language & Input ->Personal dictionary.

Ejemplo de consulta SQL que busca palabras que contengan SO en el diccionario del usuario y su equivalente muestra el código de Android. Observe el uso de ? para ser reemplazado por args.

consulta SQL:

SELECT UserDictionary.Words._ID, UserDictionary.Words.WORD FROM UserDictionary.Words.CONTENT_URI WHERE UserDictionary.Words.WORD LIKE "%SO% 

código equivalente:

String[] columns = {UserDictionary.Words._ID, UserDictionary.Words.WORD}; 
String condition = UserDictionary.Words.WORD + " LIKE ? "; 
// ? in condition will be replaced by `args` in order. 
String[] args = {"%SO%"}; 

ContentResolver resolver = getContentResolver(); 
Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, columns, condition, args, null); 
//Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, projection, null, null, null); - get all words from dictionary 
if (cursor != null) { 
    int index = cursor.getColumnIndex(UserDictionary.Words.WORD); 
    //iterate over all words found 
    while (cursor.moveToNext()) { 
     //gets the value from the column. 
     String word = cursor.getString(index); 
     Log.i(TAG, "Word found: " + word); 
    } 
} 

Permiso de AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>

Cuestiones relacionadas