पदावनत 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(आपको एपीआई संस्करण 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 ... कोई भी मामले में काम नहीं करता है ... अगर uri "फ़ाइल: //" से शुरू होता है, तो सही रास्ता नहीं देता
AndreaF

file://URI का आम तौर पर उपयोग करके हल नहीं किया जा सकता है contentUri: यदि आपके पास एक फाइल है तो URI से आपके पास वास्तविक रास्ता है।
फेमिनी

क्या आप मुझे अधिक जानकारी दे सकते हैं? मेरे पास एक "उरी" है, मेरी समस्या फ़ाइल के बिना वास्तविक पूर्ण पथ प्राप्त करना है: //, / सामग्री: / और अन्य विशेषताएँ।
एंड्रियाएफ

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

आपको कर्सर becauese को इनिशियलाइज़ करने की आवश्यकता है, यह विधि शुरू होने से पहले बंद हो जाएगा या कुछ और कहाँ होगा

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

8
प्रारंभिक कर्सर वास्तव में पदावनत विधि के साथ मदद करता है?
इलियरेमिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.