Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีโหลดรูปภาพจาก URL ลง ImageView ใน Android ด้วย Kotlin

บทนำ

ตัวอย่างนี้สาธิตการดาวน์โหลดและแสดงรูปภาพจาก URL ลงใน ImageView โดยใช้ AsyncTask (วิธีคลาสสิก) ใน Kotlin

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ใหม่ใน Android Studio

ขั้นตอนที่ 2: Layout (activity_main.xml)

เพิ่มโค้ดใน res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="Load Image From URL in Android ImageView"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/text"
        android:layout_marginTop="5dp" />

</RelativeLayout>

ขั้นตอนที่ 3: MainActivity.kt

เพิ่มโค้ดใน src/MainActivity.kt:

import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.AsyncTask
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        DownloadImageFromInternet(findViewById(R.id.imageView)).execute(
            "https://images.unsplash.com/photo-1535332371349-a5d229f49cb5?ixlib=rb-1.2.1&w=1000&q=80"
        )
    }

    @SuppressLint("StaticFieldLeak")
    @Suppress("DEPRECATION")
    private inner class DownloadImageFromInternet(var imageView: ImageView) : AsyncTask<String, Void, Bitmap?>() {
        init {
            Toast.makeText(applicationContext, "Please wait, it may take a few minute...", Toast.LENGTH_SHORT).show()
        }

        override fun doInBackground(vararg urls: String): Bitmap? {
            val imageURL = urls[0]
            var image: Bitmap? = null
            try {
                val `in` = java.net.URL(imageURL).openStream()
                image = BitmapFactory.decodeStream(`in`)
            } catch (e: Exception) {
                Log.e("Error Message", e.message.toString())
                e.printStackTrace()
            }
            return image
        }

        override fun onPostExecute(result: Bitmap?) {
            imageView.setImageBitmap(result)
        }
    }
}

ข้อแนะนำ: AsyncTask ถูก Deprecated แล้วใน API 30 ควรใช้ไลบรารีทันสมัยเช่น Glide, Picasso, Coil หรือ Coroutines + OkHttp แทนเพื่อประสิทธิภาพและความปลอดภัยที่ดีกว่า

ขั้นตอนที่ 4: AndroidManifest.xml

เพิ่ม Permission อินเทอร์เน็ต:

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

การทดสอบ

รันแอปบนอุปกรณ์จริง จะเห็นรูปภาพโหลดจาก URL แสดงใน ImageView

วิธีโหลดรูปภาพจาก URL ลง ImageView ใน Android ด้วย Kotlin วิธีโหลดรูปภาพจาก URL ลง ImageView ใน Android ด้วย Kotlin