Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में दी गई URL से इमेज डाउनलोड करके कैसे सेव करें?

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" बटन दबाएं और डाउनलोड की गई इमेज देखें।

  1. Android में Glide लाइब्रेरी से इमेज को Bitmap में कैसे डाउनलोड करें? Android में Glide लाइब्रेरी से इमेज को Bitmap में कैसे डाउनलोड करें?

    परिचय Glide (बम्पटेक द्वारा) एक शक्तिशाली इमेज लोडिंग लाइब्रेरी है जो इमेज को Bitmap ऑब्जेक्ट के रूप में डाउनलोड करने की अनुमति देती है। यह तब उपयोगी है जब आपको इमेज पर प्रोसेसिंग करनी हो या उसे ImageView के बाहर उपयोग करना हो। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं और डिपेंडेंसी जोड़ें Android Stu

  1. एंड्रॉइड पर ट्विटर GIF सेव करें: त्वरित और आसान गाइड एंड्रॉइड पर ट्विटर GIF सेव करें: त्वरित और आसान गाइड

    ट्विटर सोशल मीडिया की मात्र परिभाषा से आगे निकल गया है क्योंकि इसका उपयोग दुनिया की घटनाओं से अवगत कराने के अलावा और भी बहुत कुछ के लिए किया जा रहा है। संगठन, सेलिब्रिटी, राजनीतिक हस्तियां और छात्र, हर कोई अपने विचारों को व्यक्त करने और बढ़ावा देने के लिए इस प्लेटफॉर्म का उपयोग करता है। इस माइक्रो-ब

  1. एंड्रॉयड पर Twitter और Instagram वीडियो डाउनलोड करें: आसान स्टेप-बाय-स्टेप गाइड एंड्रॉयड पर Twitter और Instagram वीडियो डाउनलोड करें: आसान स्टेप-बाय-स्टेप गाइड

    सोशल मीडिया को अपने दोस्तों और परिवार के संपर्क में रहने के सर्वोत्तम तरीकों में से एक माना जाता है। Twitter और Instagram जैसे सोशल मीडिया प्लेटफॉर्म की टाइमलाइन हर घंटे ढेर सारी फोटोज और वीडियोज से भरी होती है। हालांकि, दोनों प्लेटफॉर्म अपने यूजर्स को वीडियो कंटेंट डाउनलोड करने की अनुमति नहीं देते।