Problema de ManagedQuery () obsoleto

109

Tengo este método:

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

Desafortunadamente, el compilador me mostró un problema en:

Cursor cursor = managedQuery(contentUri, proj, null, null, null);

Porque managedQuery()está en desuso.

¿Cómo podría reescribir este método sin usarlo managedQuery()?

AndreaF
fuente

Respuestas:

255

Puede reemplazarlo con context.getContentResolver().queryy LoaderManager(deberá usar el paquete de compatibilidad para admitir dispositivos antes de la versión 11 de API).

Sin embargo, parece que solo está utilizando la consulta una vez: probablemente ni siquiera la necesite. ¿Quizás esto funcionaría?

public String getRealPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
    if(cursor.moveToFirst()){;
       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}
Femi
fuente
ops ... no no funciona en ningún caso ... si el uri comienza con "file: //" no devuelve la ruta correcta
AndreaF
file://Los URI generalmente no se pueden resolver usando contentUri: si tiene un URI de archivo, YA tiene la ruta real.
Femi
¿Podrías darme más detalles? Tengo un "Uri", mi problema es obtener la ruta absoluta real sin file: //, / content: / y otros atributos.
AndreaF
1
Para un URI de contenido, necesitará un solucionador para obtener un URI de archivo, y una vez que tenga un URI de archivo, puede hacerlo new File(new URI(uri.getPath()));.
Femi
1
Ah, claro: new File(new URI(uri.getPath())).getAbsolutePath();es lo que necesitas, ¿no?
Femi
3
public void getBrowserHist(Context context) {
        Cursor mCur = context.getContentResolver().query(Browser.BOOKMARKS_URI,
                Browser.HISTORY_PROJECTION, null, null, null);
        mCur.moveToFirst();
        if (mCur != null && mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false) {
                Log.e("hist_titleIdx",
                        mCur.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
                Log.e("hist_urlIdx",
                        mCur.getString(Browser.HISTORY_PROJECTION_URL_INDEX));
                mCur.moveToNext();
            }
        }
    }
PrvN
fuente
-6

necesita inicializar el cursor porque estará cerca antes del inicio del método o en algún otro lugar

cursor = null;
public void method(){
// do your stuff here 
cursor.close();
}
IdioT de buggy
fuente
8
Inicializar el cursor ayuda con el método obsoleto, ¿de verdad?
IlyaEremin