2013-02-14 11 views
8

से एंड्रॉइड ऐप डिस्प्ले छवि मैं एक बहुत ही बुनियादी कार्य की तलाश में हूं। मैं एक ऐप डिज़ाइन करने की कोशिश कर रहा हूं और मैं इसे एक यूआरएल से एक छवि लोड करना चाहता हूं। मुझे कुछ प्रश्न और वेबसाइट मिल गई हैं, लेकिन वे सभी पुराने और दिनांकित प्रतीत होते हैं, लेकिन मुझे लगता है कि मुझे समस्याएं हैं जिनमें कोडव्यू के लिए गतिविधि मुख्य.एक्सएमएल कोड को लिंक करना है।यूआरएल

आपके पास कोई भी सुझाव या लिंक मैं बहुत सराहना करता हूं, धन्यवाद।

उत्तर

11

यहाँ, यह कैसे मैं छवि को ध्यान में रखते यूआरएल से छवि प्रदर्शित है
आप भूल नहीं है चारों ओर धागे से इस कोड को मुख्य थ्रेड के अलावा अन्य

ImageView img = (ImageView) findViewById(R.id.imageView1); 
try { 
     URL url = new URL("Your URL"); 
     //try this url = "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg" 
     HttpGet httpRequest = null; 

     httpRequest = new HttpGet(url.toURI()); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient 
       .execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity b_entity = new BufferedHttpEntity(entity); 
     InputStream input = b_entity.getContent(); 

     Bitmap bitmap = BitmapFactory.decodeStream(input); 

     img.setImageBitmap(bitmap); 

    } catch (Exception ex) { 

    } 

सावधान रहें कॉल करनी होगी कोशिश पकड़ के साथ कोड (मैं पहले से ही किया है कि इस कोड में)

या आप यूआरएल से छवि को लोड करने का वेब दृश्य का उपयोग कर सकते

WebView web = (WebView) findViewById(R.id.webView1); 
web.loadUrl("Your Url"); 
,210

आप से संपत्ति फ़ोल्डर यूआरएल छवि को लोड करने की तरह इस शुरू कर देंगे कोशिश कर रहे हैं, तो "फ़ाइल: ///android_asset/yourimage.jpg" इस "http://0.tqn.com/d/webclipart/1/0/5/l/4/floral-icon-5.jpg"

आशा की तरह
बाकी सामान्य इंटरनेट यूआरएल इस आपके लिए काम करता है गुड लक

+1

मैं आपकी पोस्ट को संपादित करने का प्रयास करता हूं लेकिन मुझे लगता है कि किसी भी तरह का जवाब अभी तक अपडेट नहीं किया गया है। क्या आप बोल्ड फ़ॉन्ट के साथ उत्तर में अतिरिक्त नोट डाल सकते हैं जिसका उल्लेख है कि आपको मुख्य थ्रेड के अलावा थ्रेड से यह कोड कॉल करना होगा। – VendettaDroid

+0

लेकिन मैंने इसे थ्रेड से नहीं बुलाया और यह मेरे लिए ठीक काम करता है। क्या आप इसे स्पष्ट कर सकते हैं। धन्यवाद। –

+1

एंड्रॉइड के पास अब किसी भी नेटवर्क संचार पर सख्त नीति है। आपको इस कोड को दोबारा प्रयास करना चाहिए। आपके द्वारा लिखे गए कोड में नेटवर्क की गति और छवि आकार के आधार पर दूरस्थ यूआरएल से छवि प्राप्त करने में कोई समय लग सकता है। यदि आप इस कोड को यूआई से कॉल कर रहे हैं तो एक मौका है कि आपका यूआई थ्रेड अवरुद्ध हो जाएगा और आपको एएनआर देगा। यदि आप कर सकते हैं तो आईसीएस पर इस कोड को आज़माएं। यह शायद एक अपवाद "NetWorkOnMainThread" देना चाहिए। या आप बस इस अपवाद के लिए Google खोज सकते हैं। – VendettaDroid

4

इमेजलोडर नामक एक ओपनसोर्स लाइब्रेरी है। इसका व्यापक रूप से उपयोग किया जाता है, आप इसे सीधे इस्तेमाल कर सकते हैं या इसके समान कोड बना सकते हैं।

https://github.com/nostra13/Android-Universal-Image-Loader

0

आप छवि लेने के लिए और अपने php पक्ष पर कर सकते हैं एक बेस 64 में परिवर्तित और फिर एंड्रॉयड तरफ एक छवि में यह डिकोड।

0

छवि डाउनलोड करने का सबसे अच्छा अभ्यास पृष्ठभूमि थ्रेड पर किया जाना है, ताकि यह आपके मुख्य थ्रेड को बाधित न करे, फिर आवश्यकतानुसार उपयोगकर्ता इंटरफ़ेस को अपडेट करें।

सार्वजनिक वर्ग 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 जहां मैं अपने सभी नेटवर्क संचालन किया है फैली बनाया फैली हुई है। अपने मैनिफेस्ट फ़ाइल में उपयोग अनुमति जोड़ने के लिए सुनिश्चित करें।

आशा है कि यह आपके लिए भी काम करेगा।