Kullanımdan Kaldırılmış ManagedQuery () sorunu


109

Bu yönteme sahibim:

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

Maalesef derleyici bana şu konuda bir problem gösteriyor:

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

Çünkü managedQuery()kullanımdan kaldırıldı.

Bu yöntemi kullanmadan nasıl yeniden yazabilirim managedQuery()?

Yanıtlar:


255

Bunu context.getContentResolver().queryve ile değiştirebilirsiniz LoaderManager(API sürüm 11'den önce cihazları desteklemek için uyumluluk paketini kullanmanız gerekir).

Ancak, sorguyu yalnızca bir kez kullanıyormuşsunuz gibi görünüyor: muhtemelen buna ihtiyacınız bile yok. Belki bu işe yarar?

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 ... hayır hiçbir durumda çalışmaz ... uri "file: //" ile başlarsa doğru yolu döndürmez
AndreaF

file://URI'ler genellikle şu şekilde çözülemez contentUri: Eğer bir dosya URI'niz varsa, ZATEN gerçek yola sahipsiniz.
Femi

Bana daha fazla ayrıntı verebilir misin? Bir "Uri" var, benim sorunum file: //, / content: / ve diğer öznitelikler olmadan gerçek mutlak yolu elde etmektir.
AndreaF

1
Bir içerik URI'sı için, bir dosya URI'sı almak için bir çözümleyiciye ihtiyacınız olacak ve bir dosya URI'niz olduğunda bunu yapabilirsiniz new File(new URI(uri.getPath()));.
Femi

1
Ah, elbette: new File(new URI(uri.getPath())).getAbsolutePath();ihtiyacın olan şey değil mi?
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

İmleci başlatmanız gerekir, çünkü yöntem başlamadan önce veya başka bir yerde yakın olacaktır

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

8
İmleci başlatmak, kullanımdan kaldırılan yönteme yardımcı olur, gerçekten?
IlyaEremin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.