不建议使用的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()

Answers:


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 2012年

file://URI通常无法使用来解析contentUri:如果您有文件URI,则您已经具有真实路径。
Femi 2012年

您能给我更多细节吗?我有一个“ Uri”,我的问题是获取没有file://,/ content:/和其他属性的真实绝对路径。
2012年

1
对于内容URI,您将需要一个解析器来获取文件URI,一旦有了文件URI,就可以执行操作new File(new URI(uri.getPath()));
Femi

1
啊,确定:new File(new URI(uri.getPath())).getAbsolutePath();是您所需要的,不是吗?
Femi 2012年

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年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.