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

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

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

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

8
Cursor initialisieren hilft bei veralteten Methoden, wirklich?
— IlyaEremin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.