2014-10-22 7 views
7

मैं अपने ऐप में पिकासो का उपयोग कर रहा हूं।पिकासो सिंगलटन उपयोग

Picasso.with(context)....into(imgView); 

इस तरह मुझे लगता है मैं एक सिंगलटन के रूप में पिकासो का उपयोग करें:

पहले, मैं केवल नीचे प्रारूप का उपयोग करें। क्या मैं

दूसरा, मैं setIndicatorsEnabled का उपयोग करना चाहता हूं। हालांकि इसे उपरोक्त प्रारूप में जोड़ा नहीं जा सकता है क्योंकि यह एक स्थिर विधि नहीं है। क्या उपरोक्त प्रारूप में इस फ़ंक्शन का उपयोग करने का कोई तरीका है?

तीसरा, अगर मैं आदेश setIndicatorsEnabled का उपयोग करने के Picasso.Builder(...).build() उपयोग कर एक कस्टम उदाहरण बनाने की जरूरत, सबसे अच्छा तरीका अनुप्रयोग के क्रियाकलापों के बारे में सिंगलटन उपयोग हासिल करने के लिए क्या है?

+3

'क्या मैं?': https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso/Picasso.java# देखें एल 5 9 1 (हाँ) – njzk2

+2

'सेट इंडिकेटरएना bled': 'के साथ' एक उदाहरण देता है। उस उदाहरण पर 'setIndicatorsEnabled' को कॉल करें – njzk2

उत्तर

10

हाँ आप यह मान जब आप Picasso.with (संदर्भ) का उपयोग पिकासो एक सिंगलटन उदाहरण है ....

सेट संकेतक का उपयोग करने के लिए सक्षम

Picasso mPicasso = Picasso.with(context); 
mPicasso.setIndicatorsEnabled(true); 
mPicasso....load().into(imageView); 

अगर आप निर्माता का उपयोग आप बनाना चाहिए अपने पिकासो के अपने उदाहरण को पकड़ने के लिए अपने सिंगलटन और अपना काम पूरा होने पर इसे साफ़ करें। हर बार जब आप पिकासो का उपयोग करते हैं तो बिल्डर का उपयोग न करें क्योंकि यह एक नया उदाहरण बनाता है। मेरा मानना ​​है कि पिकासो.with (संदर्भ) सिर्फ आपका संदर्भ लेता है और कॉल एप्प्लिकेशन कॉन्टेक्स्ट प्राप्त करता है और एप्लिकेशन संदर्भ के साथ पिकासो के सिंगलटन इंस्टेंस को स्टोर करता है।

3

यहाँ एक सिंगलटन पिकासो वर्ग

public class ImageHandler { 

    private static Picasso instance; 

    public static Picasso getSharedInstance(Context context) 
    { 
     if(instance == null) 
     { 
      instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build(); 
     } 
     return instance; 
    } 
} 

और कोड में इसके बारे में तो एक कार्यान्वयन लागू करने के लिए इस प्रकार होगा एक अच्छा तरीका है:

ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().resize(width, height).into(image, new Callback() { 
     @Override 
     public void onSuccess() { 
      layout.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onError() { 

     } 
    }); 

नोट आप की जरूरत नहीं है कि यदि आवश्यक नहीं है तो कॉलबैक लागू करें

+1

यदि आप उस वापसी के बयान को अपने if-else क्लॉज के बाहर रखते हैं और डुप्लिकेट को हटाते हैं, तो आपका कोड बहुत क्लीनर होगा –

+2

सहमत, धन्यवाद .... हमेशा पहली बार सबसे अच्छा तरीका कोड नहीं किया गया। .. –