非推奨の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().queryandに置き換えることができLoaderManagerます(APIバージョン11より前のデバイスをサポートするには、互換性パッケージを使用する必要があります)。

ただし、クエリを1回しか使用していないようです。おそらく必要ないでしょう。多分これはうまくいくでしょうか?

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 ... noはどのような場合でも機能しません... URIが「file://」で始まる場合、正しいパスが返されません
AndreaF

file://URIは通常contentUri、次を使用して解決することはできません。ファイルURIがある場合、すでに実際のパスを持っています。
フェミ

詳細を教えてください。私は「URI」を持っています。私の問題は、file://、/ content:/などの属性なしで実際の絶対パスを取得することです。
AndreaF

1
コンテンツURIの場合は、ファイルURIを取得するためのリゾルバーが必要です。ファイルURIを取得したら、すぐに実行できますnew File(new URI(uri.getPath()));
Femi

1
確かに、new File(new URI(uri.getPath())).getAbsolutePath();必要なものはありますか?
Femi

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
カーソルの初期化は、非推奨のメソッドに役立ちますか?
IlyaEremin 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.