Android में AsyncTask से URL से इमेज डाउनलोड करने का गाइड
यह ट्यूटोरियल दिखाता है कि कैसे AsyncTask, HttpURLConnection और BitmapFactory का उपयोग करके बैकग्राउंड थ्रेड में इमेज डाउनलोड करके ImageView में दिखाया जाए।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट फ़ाइल में कोड जोड़ें
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>
चरण 3: MainActivity.java में कोड जोड़ें
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("Downloading");
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();
} finally {
if (connection != null) connection.disconnect();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
mProgressDialog.dismiss();
if (result != null) {
mImageView.setImageBitmap(result);
} else {
Toast.makeText(MainActivity.this, "Error downloading image", 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;
}
}
चरण 4: 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/OkHttp या Coil/Glide/Picasso लाइब्रेरी उपयोग करें
- नेटवर्क ऑपरेशन मुख्य थ्रेड पर नहीं चल सकते - बैकग्राउंड थ्रेड आवश्यक
- बड़ी इमेज के लिए
BitmapFactory.Options.inSampleSizeउपयोग करके मेमोरी बचाएं - कैशिंग के लिए LruCache या डिस्क कैश (DiskLruCache) जोड़ें
आधुनिक विकल्प: Coil लाइब्रेरी (Kotlin)
// build.gradle
implementation "io.coil-kt:coil:2.4.0"
// उपयोग
imageView.load("https://example.com/image.jpg")
ऐप चलाएं
डिवाइस कनेक्ट करें, Run आइकन पर क्लिक करें, "Download Image" बटन दबाएं और डाउनलोड की गई इमेज देखें।