Problème de ManagedQuery () obsolète


109

J'ai cette méthode:

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

Malheureusement, le compilateur m'a montré un problème sur:

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

Parce que managedQuery()c'est obsolète.

Comment pourrais-je réécrire cette méthode sans utilisation managedQuery()?

Réponses:


255

Vous pouvez le remplacer par context.getContentResolver().queryet LoaderManager(vous devrez utiliser le package de compatibilité pour prendre en charge les appareils antérieurs à la version 11 de l'API).

Cependant, il semble que vous n'utilisiez la requête qu'une seule fois: vous n'en avez probablement même pas besoin. Peut-être que cela fonctionnerait?

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 ne fonctionne en aucun cas ... si l'URI commence par "file: //" ne renvoie pas le bon chemin
AndreaF

file://Les URI ne peuvent généralement pas être résolus en utilisant contentUri: si vous avez un URI de fichier, vous avez DÉJÀ le chemin réel.
Femi

Pouvez-vous me donner plus de détails? J'ai un "Uri", mon problème est d'obtenir le vrai chemin absolu sans file: //, / content: / et autres attributs.
AndreaF

1
Pour un URI de contenu, vous aurez besoin d'un résolveur pour obtenir un URI de fichier, et une fois que vous avez un URI de fichier, vous pouvez le faire new File(new URI(uri.getPath()));.
Femi

1
Ah, bien sûr: new File(new URI(uri.getPath())).getAbsolutePath();c'est ce dont vous avez besoin, non?
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

vous devez initialiser le curseur car il sera fermé avant le début de la méthode ou ailleurs

cursor = null;
public void method(){
// do your stuff here 
cursor.close();
}

8
Initialiser le curseur aide avec la méthode obsolète, vraiment?
IlyaEremin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.