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.