কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে URL থেকে ইমেজ ডাউনলোড ও সংরক্ষণ করা

AsyncTask ব্যবহার করে ইন্টারনেট থেকে ইমেজ ডাউনলোড করে ImageView-এ দেখানো

এই উদাহরণটি দেখাবে কীভাবে ব্যাকগ্রাউন্ড থ্রেডে (AsyncTask) একটি URL থেকে ইমেজ ডাউনলোড করে UI-তে প্রদর্শন করা যায়। প্রগ্রেস ডায়ালগও দেখানো হয়েছে।

ধাপ ১: প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project নির্বাচন করুন।

ধাপ ২: লেআউট (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnDownload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Download Image"
        android:layout_margin="25dp"
        android:layout_gravity="top|center_horizontal" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="centerCrop"
        app:layout_anchor="@id/btnDownload"
        android:layout_gravity="bottom"
        app:layout_anchorGravity="bottom"
        android:layout_margin="10dp" />

</android.support.design.widget.CoordinatorLayout>

ধাপ ৩: মেইন এক্টিভিটি (src/MainActivity.java)

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    Context context;
    Activity activity;
    CoordinatorLayout coordinatorLayout;
    Button button;
    ProgressDialog mProgressDialog;
    ImageView mImageView;
    URL url;
    AsyncTask mMyTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        context = getApplicationContext();
        activity = MainActivity.this;
        coordinatorLayout = findViewById(R.id.coordinatorLayout);
        button = findViewById(R.id.btnDownload);
        mImageView = findViewById(R.id.imageView);

        mProgressDialog = new ProgressDialog(activity);
        mProgressDialog.setIndeterminate(true);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mProgressDialog.setTitle("AsyncTask");
        mProgressDialog.setMessage("Please wait, we are downloading your image file...");

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mMyTask = new DownloadTask().execute(stringToURL());
            }
        });
    }

    private class DownloadTask extends AsyncTask<URL, Void, Bitmap> {
        @Override
        protected void onPreExecute() {
            mProgressDialog.show();
        }

        @Override
        protected Bitmap doInBackground(URL... urls) {
            URL url = urls[0];
            HttpURLConnection connection = null;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                InputStream inputStream = connection.getInputStream();
                BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
                return BitmapFactory.decodeStream(bufferedInputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            mProgressDialog.dismiss();
            if (result != null) {
                mImageView.setImageBitmap(result);
            } else {
                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
            }
        }
    }

    protected URL stringToURL() {
        try {
            url = new URL("https://wallpapersite.com/images/pages/pic_w/6408.jpg");
            return url;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

ধাপ ৪: মেনিফেস্ট (androidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

গুরুত্বপূর্ণ দ্রষ্টব্য

  • AsyncTask ডিপ্রিকেটেড (API 30+)। আধুনিক অ্যাপে Coroutines + Retrofit/Coil/Glide/Picasso ব্যবহার করুন।
  • নেটওয়ার্ক অপারেশন মেইন থ্রেডে করা যাবে না।
  • বড় ইমেজের জন্য OutOfMemoryError এড়াতে ইনস্যাম্পলিং (inSampleSize) ব্যবহার করুন।
  • স্টোরেজে সংরক্ষণ করতে MediaStore বা FileOutputStream ব্যবহার করুন (Android 10+ scoped storage অনুযায়ী)।

ফলাফল

"Download Image" বাটনে ক্লিক করলে প্রগ্রেস ডায়ালগ দেখাবে এবং ডাউনলোড 완료 হলে ইমেজ ImageView-এ দেখাবে।

অ্যান্ড্রয়েডে URL থেকে ইমেজ ডাউনলোড ও সংরক্ষণ করা

অ্যান্ড্রয়েডে URL থেকে ইমেজ ডাউনলোড ও সংরক্ষণ করা

  1. Android অ্যাপে URL থেকে Bitmap লোড করার পদ্ধতি

  2. Android-এ Glide লাইব্রেরি ব্যবহার করে ইমেজ বিটম্যাপ হিসেবে ডাউনলোড করা

  3. অ্যান্ড্রয়েডে টুইটার থেকে GIF সেভ করুন: দ্রুত ও সহজ গাইড

  4. অ্যান্ড্রয়েডে টুইটার ও ইনস্টাগ্রাম ভিডিও ডাউনলোড করুন: সহজ ধাপে ধাপে গাইড