已过时ManagedQuery()问题(Deprecated ManagedQuery() issu

2019-06-18 10:38发布

我有这样的方法:

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

Answer 1:

你可以将其替换为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;
}


Answer 2:

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


Answer 3:

你需要初始化光标becauese这将是法启动或一些其他地方接近前

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


文章来源: Deprecated ManagedQuery() issue