Veraltetes ManagedQuery () -Problem

109

Ich habe diese Methode:

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

Leider zeigt mir der Compiler ein Problem bei:

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

Weil managedQuery()veraltet ist.

Wie könnte ich diese Methode ohne Verwendung umschreiben managedQuery()?

AndreaF
quelle

Antworten:

255

Sie können es durch context.getContentResolver().queryund ersetzen LoaderManager(Sie müssen das Kompatibilitätspaket verwenden, um Geräte vor API-Version 11 zu unterstützen).

Es sieht jedoch so aus, als würden Sie die Abfrage nur einmal verwenden: Sie brauchen das wahrscheinlich nicht einmal. Vielleicht würde das funktionieren?

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
quelle
ops ... nein funktioniert auf keinen Fall ... wenn der uri mit "file: //" beginnt, gibt er nicht den richtigen Pfad zurück
AndreaF
file://URIs können im Allgemeinen nicht aufgelöst werden mit contentUri: Wenn Sie eine Datei-URI haben, haben Sie BEREITS den tatsächlichen Pfad.
Femi
Könnten Sie mir mehr Details geben? Ich habe einen "Uri". Mein Problem besteht darin, den tatsächlichen absoluten Pfad ohne die Attribute file: //, / content: / und andere zu erhalten.
AndreaF
1
Für einen Inhalts-URI benötigen Sie einen Resolver, um einen Datei-URI abzurufen. Sobald Sie einen Datei-URI haben, können Sie dies einfach tun new File(new URI(uri.getPath()));.
Femi
1
Ah, sicher: new File(new URI(uri.getPath())).getAbsolutePath();ist was du brauchst, nein?
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
quelle
-6

Sie müssen den Cursor initialisieren, da er vor dem Start der Methode oder an einem anderen Ort geschlossen wird

cursor = null;
public void method(){
// do your stuff here 
cursor.close();
}
Buggy IdioT
quelle
8
Cursor initialisieren hilft bei veralteten Methoden, wirklich?
IlyaEremin