ปัญหา ManagedQuery () ที่เลิกใช้แล้ว


109

ฉันมีวิธีนี้:

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

น่าเสียดายที่คอมไพเลอร์แสดงปัญหาให้ฉันเห็นใน:

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

เนื่องจากmanagedQuery()เลิกใช้งานแล้ว

ฉันจะเขียนวิธีนี้ใหม่โดยไม่ใช้งานได้managedQuery()อย่างไร?

คำตอบ:


255

คุณสามารถแทนที่ด้วยcontext.getContentResolver().queryและLoaderManager(คุณจะต้องใช้แพ็คเกจความเข้ากันได้เพื่อรองรับอุปกรณ์ก่อน API เวอร์ชัน 11)

อย่างไรก็ตามดูเหมือนว่าคุณใช้แบบสอบถามเพียงครั้งเดียว: คุณอาจไม่ต้องการสิ่งนั้นด้วยซ้ำ อาจจะได้ผล?

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 ไม่ได้ผลในทุกกรณี ... ถ้า uri ขึ้นต้นด้วย "file: //" ไม่ส่งคืนเส้นทางที่ถูกต้อง
AndreaF

file://โดยทั่วไปไม่สามารถแก้ไข URI ได้โดยใช้contentUri: หากคุณมีไฟล์ URI แสดงว่าคุณมีเส้นทางจริง
Femi

คุณช่วยให้รายละเอียดเพิ่มเติมได้ไหม ฉันมี "Uri" ปัญหาของฉันคือการได้รับเส้นทางสัมบูรณ์ที่แท้จริงโดยไม่มีไฟล์: //, / content: / และแอตทริบิวต์อื่น ๆ
AndreaF

1
สำหรับเนื้อหา URI คุณจะต้องจำแนกให้ได้รับไฟล์ URI และเมื่อคุณมีไฟล์ URI new File(new URI(uri.getPath()));คุณก็สามารถทำได้
Femi

1
อาแน่ใจ: new File(new URI(uri.getPath())).getAbsolutePath();คือสิ่งที่คุณต้องการไม่ใช่เหรอ?
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

คุณต้องเริ่มต้นเคอร์เซอร์เพราะมันจะอยู่ใกล้ก่อนเริ่มวิธีการหรือที่อื่น

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

8
เริ่มต้นเคอร์เซอร์ช่วยด้วยวิธีการเลิกใช้งานจริงเหรอ?
IlyaEremin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.