छवि डाउनलोड करने का सबसे अच्छा अभ्यास पृष्ठभूमि थ्रेड पर किया जाना है, ताकि यह आपके मुख्य थ्रेड को बाधित न करे, फिर आवश्यकतानुसार उपयोगकर्ता इंटरफ़ेस को अपडेट करें।
सार्वजनिक वर्ग MainActivity AppCompatActivity {
FrameLayout frameLayout;
ImageView imageView;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frameLayout= (FrameLayout) findViewById(R.id.containerlayout);
imageView= (ImageView) findViewById(R.id.imageView);
progressBar= (ProgressBar) findViewById(R.id.progressBar);
String url="http://www.flat-e.com/flate5/wp-content/uploads/cover-960x857.jpg";
MyTask myTask= new MyTask();
myTask.execute(url);
}
class MyTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Bitmap doInBackground(String... voids) {
Bitmap bitmap=null;
try {
URL url =new URL(voids[0]);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
InputStream inputStream= connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
progressBar.setVisibility(View.GONE);
imageView.setImageBitmap(bitmap);
}
}
}
यहाँ, इस उदाहरण में मैं एक आंतरिक वर्ग MyTask जो AsyncTask जहां मैं अपने सभी नेटवर्क संचालन किया है फैली बनाया फैली हुई है। अपने मैनिफेस्ट फ़ाइल में उपयोग अनुमति जोड़ने के लिए सुनिश्चित करें।
आशा है कि यह आपके लिए भी काम करेगा।
स्रोत
2016-10-05 10:49:30
मैं आपकी पोस्ट को संपादित करने का प्रयास करता हूं लेकिन मुझे लगता है कि किसी भी तरह का जवाब अभी तक अपडेट नहीं किया गया है। क्या आप बोल्ड फ़ॉन्ट के साथ उत्तर में अतिरिक्त नोट डाल सकते हैं जिसका उल्लेख है कि आपको मुख्य थ्रेड के अलावा थ्रेड से यह कोड कॉल करना होगा। – VendettaDroid
लेकिन मैंने इसे थ्रेड से नहीं बुलाया और यह मेरे लिए ठीक काम करता है। क्या आप इसे स्पष्ट कर सकते हैं। धन्यवाद। –
एंड्रॉइड के पास अब किसी भी नेटवर्क संचार पर सख्त नीति है। आपको इस कोड को दोबारा प्रयास करना चाहिए। आपके द्वारा लिखे गए कोड में नेटवर्क की गति और छवि आकार के आधार पर दूरस्थ यूआरएल से छवि प्राप्त करने में कोई समय लग सकता है। यदि आप इस कोड को यूआई से कॉल कर रहे हैं तो एक मौका है कि आपका यूआई थ्रेड अवरुद्ध हो जाएगा और आपको एएनआर देगा। यदि आप कर सकते हैं तो आईसीएस पर इस कोड को आज़माएं। यह शायद एक अपवाद "NetWorkOnMainThread" देना चाहिए। या आप बस इस अपवाद के लिए Google खोज सकते हैं। – VendettaDroid