অবহেলিত ম্যানেজডকুইয়ারি () সমস্যা


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

অপস ... কোনও ক্ষেত্রে কোনও কাজ করে না ... যদি uri "ফাইল: //" দিয়ে শুরু হয় তবে সঠিক পথটি না ফিরিয়ে
AndreaF

file://ইউআরআইগুলি সাধারণত এটি ব্যবহার করে সমাধান করা যায় না contentUri: আপনার যদি একটি ফাইল ইউআরআই থাকে তবে আপনার অবশ্যই আসল পথ থাকে।
Femi

আপনি আমাকে আরও বিশদ দিতে পারেন? আমার একটি "উরি" আছে, আমার সমস্যাটি ফাইল: //, / সামগ্রী: / এবং অন্যান্য বৈশিষ্ট্য ছাড়াই আসল পরম পাথ পাওয়া।
AndreaF

1
কোনও সামগ্রী ইউআরআইয়ের জন্য আপনার ফাইল ইউআরআই পেতে একটি রেজলভারের প্রয়োজন হবে এবং আপনার একবার ইউআরআই ফাইল হয়ে গেলে আপনি এটি করতে পারেন new File(new URI(uri.getPath()));
Femi 21

1
আহ, নিশ্চিত: new File(new URI(uri.getPath())).getAbsolutePath();আপনার যা প্রয়োজন, তাই না?
Femi 21

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
কার্সারকে প্রাথমিকভাবে অবহিত পদ্ধতিতে সহায়তা করে আক্ষরিক অর্থে?
ইলিয়াআরমিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.