已废弃的ManagedQuery()问题

116

我有这个方法:

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

3个回答

266

你可以用 context.getContentResolver().queryLoaderManager 来替换它(你需要使用兼容包以支持 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;
}

哎呀,无论如何都不起作用了...如果URI以“file://”开头,则不会返回正确的路径。 - AndreaF
1
对于内容URI,您需要一个解析器来获取文件URI,一旦您拥有了文件URI,您只需执行 new File(new URI(uri.getPath())); 即可。 - Femi
1
啊,当然:new File(new URI(uri.getPath())).getAbsolutePath(); 是你需要的,对吧? - Femi
嘿,你最终解决方案想出来了吗,AndreaF? - Lion789
谢谢!getContentResolver().query(uri, projection, null, null, null); 运行得很好。 - Mangi Morobe
显示剩余5条评论

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

-8

你需要初始化游标,因为它会在方法开始之前或其他地方关闭。

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

8
初始化光标有助于弃用的方法,是真的吗? - IliaEremin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接