บทนำ
ตัวอย่างนี้สาธิตการดาวน์โหลดและแสดงรูปภาพจาก 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
