12

मैं पिकासो उपयोग करने के लिए एक URLपिकासो java.lang.IllegalStateException: विधि कॉल मुख्य थ्रेड

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab2); 
    Drawable d1 = new BitmapDrawable(Picasso.with(Tab2.this).load(zestimateImg1).get()); 
} 

मैं इस कोड के साथ FATAL EXCEPTION हो रही है से तीन Bitmap छवियों प्राप्त करने का प्रयास कर रहा हूँ से नहीं होना चाहिए। मुझे संदेह है कि इसे इस तथ्य से करना है कि यह AsyncTask के भीतर किया जाना चाहिए, लेकिन मैं इसे काम नहीं कर सकता। यदि इसका उपयोग करना टालने योग्य है, तो मैं AsyncTask का उपयोग किए बिना ऐसा करना चाहता हूं।

मैं इस कोड को क्रैश किए बिना चलाने के लिए कैसे प्राप्त कर सकता हूं?

यदि ऐसा करने का सबसे अच्छा तरीका AsyncTask के साथ है, तो वह समाधान ठीक है।

+0

देखो पिकासो के प्रलेखन पर फिर से और देखें कि वे जहां 'फोन (मिल)' और यह कैसे इरादा है इस्तेमाल किया जाएगा। – zapl

+1

@zapl मुझे यह पता चलता है: 'android.graphics.Bitmap get() सिंक्रनाइज़ रूप से इस अनुरोध को पूरा करता है। 'मैं धागे को इतना समझ नहीं पा रहा हूं:/ –

+0

मैं' AsyncTask' समाधान भी स्वीकार करूंगा, हालांकि मुझे तीन छवियां लोड करनी होंगी। मुझे बस काम करने के लिए इसकी आवश्यकता है –

उत्तर

7

आप मुख्य धागे में तुल्यकालिक अनुरोध नहीं कर सकते हैं। यदि आप AsyncThread का उपयोग नहीं करना चाहते हैं तो बस लक्ष्य के साथ पिकासो का उपयोग करें।

Picasso.with(Tab2.this).load(zestimateImg1).into(new Target(...); 

मैं सुझाव है कि आप इतने की तरह अपने लक्ष्य के लिए एक संदर्भ को बचाने:

Target mTarget =new Target (...); 

इसका कारण यह है पिकासो उन्हें कमजोर संदर्भ का उपयोग करता है और वे पहले प्रक्रिया समाप्त होने कचरा एकत्र हो सकता है।

+1

क्या आप इस पर एक उदाहरण के साथ विस्तार कर सकते हैं? –

2

बस रिकार्ड के लिए:

Picasso.with(context).load(url).into(new Target() { 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     Log.i(TAG, "The image was obtained correctly"); 
    } 

    @Override 
    public void onBitmapFailed(Drawable errorDrawable) { 
     Log.e(TAG, "The image was not obtained"); 
    } 

    @Override 
    public void onPrepareLoad(Drawable placeHolderDrawable) { 
     Log.(TAG, "Getting ready to get the image"); 
     //Here you should place a loading gif in the ImageView to 
     //while image is being obtained. 
    } 
}); 

स्रोत: http://square.github.io/picasso/

onPrepareLoad() हर बार अनुरोध शुरू करने के बाद कहा जाता है। from "डिस्क", "स्मृति" या "नेटवर्क" हो सकता है यह इंगित करने के लिए कि छवि कहां से प्राप्त की गई थी। इसके बाद के संस्करण की

0

कोई भी मेरे लिए बजाय काम किया इस

Handler uiHandler = new Handler(Looper.getMainLooper()); 
    uiHandler.post(new Runnable(){ 
     @Override 
     public void run() { 
      Picasso.with(Context) 
        .load(imageUrl) 
        .into(imageView); 
     } 
    }); 

आशा है कि यह किसी

के लिए उपयोगी हो सकता है
संबंधित मुद्दे