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

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

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

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

8
Inisialisasi bantuan kursor dengan metode usang, benarkah?
— IlyaEremin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.