Deprecated ManagedQuery() issue

JavaAndroidDeprecated

Java Problem Overview


I have this method:

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

Unfortunately the compiler show me a problem on:

Cursor cursor = managedQuery(contentUri, proj, null, null, null);

Because managedQuery() is deprecated.

How could I rewrite this method without use managedQuery()?

Java Solutions


Solution 1 - Java

You could replace it with context.getContentResolver().query and LoaderManager (you'll need to use the compatibility package to support devices before API version 11).

However, it looks like you're only using the query one time: you probably don't even need that. Maybe this would work?

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

Solution 2 - Java

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

Solution 3 - Java

you need to initialize the cursor becauese it will be close before method start or some where else

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAndreaFView Question on Stackoverflow
Solution 1 - JavaFemiView Answer on Stackoverflow
Solution 2 - JavaPrvNView Answer on Stackoverflow
Solution 3 - JavaBuggy IdioTView Answer on Stackoverflow