더 이상 사용되지 않는 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().queryand로 바꿀 수 있습니다 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"가 있습니다. 내 문제는 file : //, / 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 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.