Masalah ManagedQuery () yang tidak berlaku lagi

109

Saya memiliki metode ini:

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

Sayangnya kompiler menunjukkan masalah pada saya:

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

Karena managedQuery()sudah usang.

Bagaimana saya bisa menulis ulang metode ini tanpa menggunakan managedQuery()?

AndreaF
sumber

Jawaban:

255

Anda dapat menggantinya dengan context.getContentResolver().querydan LoaderManager(Anda harus menggunakan paket kompatibilitas untuk mendukung perangkat sebelum API versi 11).

Namun, sepertinya Anda hanya menggunakan kueri satu kali: Anda bahkan mungkin tidak membutuhkannya. Mungkin ini akan berhasil?

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
sumber
ops ... no tidak berfungsi dalam hal apa pun ... jika uri dimulai dengan "file: //" tidak mengembalikan jalur yang benar
AndreaF
file://URI umumnya tidak dapat diselesaikan menggunakan contentUri: jika Anda memiliki file URI, Anda SUDAH memiliki jalur yang sebenarnya.
Femi
Bisakah Anda memberi saya detail lebih lanjut? Saya memiliki "Uri", masalah saya adalah mendapatkan jalur absolut yang sebenarnya tanpa atribut file: //, / content: / dan lainnya.
AndreaF
1
Untuk URI materi, Anda memerlukan resolver untuk mendapatkan URI file, dan setelah Anda memiliki URI file, Anda bisa melakukannya new File(new URI(uri.getPath()));.
Femi
1
Ah, tentu: new File(new URI(uri.getPath())).getAbsolutePath();apa yang Anda butuhkan, bukan?
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
sumber
-6

Anda perlu menginisialisasi kursor karena itu akan dekat sebelum metode dimulai atau di tempat lain

cursor = null;
public void method(){
// do your stuff here 
cursor.close();
}
Buggy IdioT
sumber
8
Inisialisasi bantuan kursor dengan metode usang, benarkah?
IlyaEremin