Android এ ইউআরএল দ্বারা একটি চিত্র ভিউ লোড কিভাবে?




bitmap imageview (16)

আপনি কিভাবে ইমেজ ImageView ইউআরএল দ্বারা রেফারেন্সকৃত একটি চিত্র ব্যবহার করেন?


অ্যান্ড্রয়েড ক্যোয়ারী আপনার জন্য এবং আরও অনেক কিছু (যেমন ক্যাশ এবং লোডিং অগ্রগতি) পরিচালনা করতে পারে।

here

আমি মনে করি সেরা পদ্ধতি।


আপনাকে প্রথমে ছবিটি ডাউনলোড করতে হবে

public static Bitmap loadBitmap(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;

    try {
        in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);

        final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
        out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
        copy(in, out);
        out.flush();

        final byte[] data = dataStream.toByteArray();
        BitmapFactory.Options options = new BitmapFactory.Options();
        //options.inSampleSize = 1;

        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
    } catch (IOException e) {
        Log.e(TAG, "Could not load Bitmap from: " + url);
    } finally {
        closeStream(in);
        closeStream(out);
    }

    return bitmap;
}

তারপর ImageView এ বিটম্যাপ সেট করতে Imageview.setImageBitmap ব্যবহার করুন


আমার মতামত জন্য এই ধরনের একটি কাজের জন্য সেরা আধুনিক লাইব্রেরি স্কয়ার দ্বারা Picasso হয়। এটি একটি ইমেজ ভিউতে URL দ্বারা এক-লাইনার লোড করতে সক্ষম করে:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

আমি এটি পরিচালনা করার জন্য একটি ক্লাস লিখেছিলাম, কারণ এটি আমার বিভিন্ন প্রকল্পগুলিতে পুনরাবৃত্তিমূলক প্রয়োজন বলে মনে হচ্ছে:

https://github.com/koush/UrlImageViewHelper

UrlImageViewHelper একটি URL এ পাওয়া একটি চিত্র সহ একটি চিত্র ভিউ পূরণ করবে।

নমুনা একটি গুগল ইমেজ অনুসন্ধান এবং লোড / ফলাফল সমकालिकভাবে প্রদর্শন করবে।

UrlImageViewHelper স্বয়ংক্রিয়ভাবে BitmapDrawables এর সমস্ত চিত্র urls ডাউনলোড, সংরক্ষণ এবং ক্যাশ করবে। ডুপ্লিকেট ইউআরএল দুইবার মেমরি লোড করা হবে না। বিটম্যাপ মেমরিটি একটি দুর্বল রেফারেন্স হ্যাশ টেবিল ব্যবহার করে পরিচালিত হয়, যাতে যত তাড়াতাড়ি আপনার দ্বারা চিত্রটি ব্যবহার করা হয় না, এটি স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ করা হবে।


ইউআরএল থেকে একটি ইমেজ লোড করতে আপনি এই লোডিংআইমেজ ভিউ ভিউ ব্যবহার করতে পারেন:

http://blog.blundellapps.com/imageview-with-loading-spinner/

একবার আপনি যে লিঙ্ক থেকে ক্লাস ফাইল যোগ করেছেন একবার আপনি একটি url চিত্র ভিউ তাত্ক্ষণিক করতে পারেন:

এক্সএমএল:

<com.blundell.tut.LoaderImageView
  android:id="@+id/loaderImageView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  image="http://developer.android.com/images/dialog_buttons.png"
 />

কোডে:

final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");

এবং এটি ব্যবহার করে আপডেট করুন:

image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");

এই কোড পরীক্ষা করা হয়, এটি সম্পূর্ণরূপে কাজ করছে।

URL req = new URL(
"http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"
);
Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection()
                  .getInputStream());

এটা আপনাকে সাহায্য করবে ...

ইমেজভিউ এবং লোড ইমেজ সংজ্ঞায়িত করুন .....

Imageview i = (ImageView) vv.findViewById(R.id.img_country);
i.setImageBitmap(DownloadFullFromUrl(url));

তারপর এই পদ্ধতি নির্ধারণ করুন:

    public Bitmap DownloadFullFromUrl(String imageFullURL) {
    Bitmap bm = null;
    try {
        URL url = new URL(imageFullURL);
        URLConnection ucon = url.openConnection();
        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }
        bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0,
                baf.toByteArray().length);
    } catch (IOException e) {
        Log.d("ImageManager", "Error: " + e);
    }
    return bm;
}

এটি একটি দেরী উত্তর, যেমন AsyncTask উপরে প্রস্তাব করা হবে এবং একটি bit googling পরে আমি এই সমস্যার জন্য আরও একটি উপায় খুঁজে পাওয়া যায় নি।

Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");

imageView.setImageDrawable(drawable);

এখানে সম্পূর্ণ ফাংশন:

public void loadMapPreview () {
    //start a background thread for networking
    new Thread(new Runnable() {
        public void run(){
            try {
                //download the drawable
                final Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
                //edit the view in the UI thread
                imageView.post(new Runnable() {
                    public void run() {
                        imageView.setImageDrawable(drawable);
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

ইন্টারনেট অ্যাক্সেস করতে আপনার AndroidManifest.xml এ নিম্নলিখিত অনুমতিগুলি যোগ করতে ভুলবেন না।

<uses-permission android:name="android.permission.INTERNET" />

আমি নিজে চেষ্টা করেছি এবং এখনও পর্যন্ত কোন সমস্যা নেই।


ব্যতিক্রম হ্যান্ডলিং এবং Async টাস্ক সঙ্গে সংস্করণ:

AsyncTask<URL, Void, Boolean> asyncTask = new AsyncTask<URL, Void, Boolean>() {
    public Bitmap mIcon_val;
    public IOException error;

    @Override
    protected Boolean doInBackground(URL... params) {
        try {
            mIcon_val = BitmapFactory.decodeStream(params[0].openConnection().getInputStream());
        } catch (IOException e) {
            this.error = e;
            return false;
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean success) {
        super.onPostExecute(success);
        if (success) {
            image.setImageBitmap(mIcon_val);
        } else {
            image.setImageBitmap(defaultImage);
        }
    }
};
try {
    URL url = new URL(url);
    asyncTask.execute(url);
} catch (MalformedURLException e) {
    e.printStackTrace();
}

যাইহোক লোকেরা উত্তর হিসাবে আমার পোস্ট করার জন্য আমার মন্তব্য জিজ্ঞাসা। আমি পোস্ট করছি।

URL newurl = new URL(photo_url_str); 
mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream());
profile_photo.setImageBitmap(mIcon_val);

ধন্যবাদ।


অ্যান্ড্রয়েড ডেভেলপার থেকে:

// show The Image in a ImageView
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
            .execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");

public void onClick(View v) {
    startActivity(new Intent(this, IndexActivity.class));
    finish();

}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

ইন্টারনেট অ্যাক্সেস করতে আপনার AndroidManifest.xml এ নিচের নিম্নলিখিত অনুমতিগুলি নিশ্চিত করুন।

<uses-permission android:name="android.permission.INTERNET" />

1. Picasso আপনার অ্যাপ্লিকেশনে ঝামেলা মুক্ত ইমেজ লোড করার অনুমতি দেয়-প্রায়ই কোডের এক লাইনে!

গ্র্যাডল ব্যবহার করুন:

implementation 'com.squareup.picasso:picasso:2.71828'

শুধু কোড এক লাইন!

Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

2. মসৃণ স্ক্রোলিংয়ে ফোকাস করা Android এর জন্য একটি ইমেজ লোডিং এবং ক্যাশিং লাইব্রেরিটি মুগ্ধ করুন

গ্র্যাডল ব্যবহার করুন:

repositories {
  mavenCentral() 
  google()
}

dependencies {
   implementation 'com.github.bumptech.glide:glide:4.7.1'
   annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}

// একটি সহজ ভিউ জন্য:

  Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);

3. fresco Android অ্যাপ্লিকেশনগুলিতে চিত্রগুলি প্রদর্শনের জন্য একটি শক্তিশালী সিস্টেম fresco চিত্র লোডিং এবং প্রদর্শনের যত্ন নেয়, তাই আপনাকে তা করতে হবে না।

Fresco সঙ্গে শুরু করা


চিত্রের জন্য কাজ তালিকাউইউড গ্রিড ভিউ, স্বাভাবিক বিন্যাস মত কোন ধারক দেখুন

 private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > {
        ImageView ivPreview = null;

        @Override
        protected Bitmap doInBackground( Object... params ) {
            this.ivPreview = (ImageView) params[0];
            String url = (String) params[1];
            System.out.println(url);
            return loadBitmap( url );
        }

        @Override
        protected void onPostExecute( Bitmap result ) {
            super.onPostExecute( result );
            ivPreview.setImageBitmap( result );
        }
    }

    public Bitmap loadBitmap( String url ) {
        URL newurl = null;
        Bitmap bitmap = null;
        try {
            newurl = new URL( url );
            bitmap = BitmapFactory.decodeStream( newurl.openConnection( ).getInputStream( ) );
        } catch ( MalformedURLException e ) {
            e.printStackTrace( );
        } catch ( IOException e ) {

            e.printStackTrace( );
        }
        return bitmap;
    }
/** Usage **/
  new LoadImagefromUrl( ).execute( imageView, url );

public class LoadWebImg extends Activity {

String image_URL=
 "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       ImageView bmImage = (ImageView)findViewById(R.id.image);
    BitmapFactory.Options bmOptions;
    bmOptions = new BitmapFactory.Options();
    bmOptions.inSampleSize = 1;
    Bitmap bm = LoadImage(image_URL, bmOptions);
    bmImage.setImageBitmap(bm);
   }

   private Bitmap LoadImage(String URL, BitmapFactory.Options options)
   {       
    Bitmap bitmap = null;
    InputStream in = null;       
       try {
           in = OpenHttpConnection(URL);
           bitmap = BitmapFactory.decodeStream(in, null, options);
           in.close();
       } catch (IOException e1) {
       }
       return bitmap;               
   }

private InputStream OpenHttpConnection(String strURL) throws IOException{
 InputStream inputStream = null;
 URL url = new URL(strURL);
 URLConnection conn = url.openConnection();

 try{
  HttpURLConnection httpConn = (HttpURLConnection)conn;
  httpConn.setRequestMethod("GET");
  httpConn.connect();

  if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
   inputStream = httpConn.getInputStream();
  }
 }
 catch (Exception ex)
 {
 }
 return inputStream;
}
}

    String img_url= //url of the image
    URL url=new URL(img_url);
    Bitmap bmp; 
    bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
    ImageView iv=(ImageView)findviewById(R.id.imageview);
    iv.setImageBitmap(bmp);

imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside





imageview