弃用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().queryLoaderManagerreplace它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(); }