弃用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和LoaderManagerreplace它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(); }