Вимкнутий випущений ManagedQuery ()


109

У мене є цей метод:

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

Відповіді:


255

Ви можете замінити його на ( context.getContentResolver().queryі LoaderManagerвам потрібно буде використовувати пакет сумісності для підтримки пристроїв до 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;
}

ops ... ні в жодному разі не працює ... якщо урі починається з "file: //" не повертає правильний шлях
AndreaF

file://URI- contentUriадреси, як правило, неможливо вирішити, використовуючи : якщо у вас є URI-файл, у вас ВЗАЄМО реальний шлях.
Фемі

Чи можете ви мені детальніше розповісти? У мене є "Uri", моя проблема полягає в тому, щоб отримати реальний абсолютний шлях без атрибутів file: //, / content: / та інших.
AndreaF

1
Для URI вмісту вам знадобиться дозвіл на отримання URI-файлу, і коли ви матимете URI-файл, ви можете це зробити new File(new URI(uri.getPath()));.
Фемі

1
Ах, звичайно: new File(new URI(uri.getPath())).getAbsolutePath();це те, що потрібно, ні?
Фемі

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

-6

вам потрібно ініціалізувати курсор, оскільки він буде закритий до запуску методу чи ще десь ще

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

8
Насправді ініціалізація курсору допомагає із застарілим методом?
ІлляЕремін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.