弃用ManagedQuery()问题
我有这个方法:
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()
?
你可以用context.getContentResolver().query
和LoaderManager
replace它context.getContentResolver().query
在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; }
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(); } } }
你需要初始化游标,因为它会在方法启动之前closures,或者在其他地方closures
cursor = null; public void method(){ // do your stuff here cursor.close(); }