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()?

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;
}

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();
            }
        }
    }

-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();
}

8
Inicializar el cursor ayuda con el método obsoleto, ¿de verdad?
IlyaEremin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.