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.