If you’re working on an Android app using Kotlin and your ImageView
is not loading images with Glide, you’re not alone. Many Android developers face this issue, especially when handling dynamic content from APIs. Glide is a powerful image loading library, but small mistakes can prevent images from rendering properly.

Here’s a complete step-by-step guide to fix the Glide not loading images problem in Kotlin using Android Studio.
Common Causes Why Glide Fails to Load Images:
- Invalid or null image URLs
- Glide not initialized correctly
- Image loading inside a
RecyclerView
with incorrect context - Missing Internet permission
- Using the wrong lifecycle context
1. Add Glide to Your Project
Open your build.gradle (Module)
file and add:
dependencies { implementation 'com.github.bumptech.glide:glide:4.16.0' kapt 'com.github.bumptech.glide:compiler:4.16.0' }
Don’t forget to apply the Kotlin KAPT plugin at the top:
apply plugin: 'kotlin-kapt'
Then sync the project.
2. Add Internet Permission
In your AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET"/>
3. Full Example: Load Image into ImageView
Here is the layout XML (activity_main.xml
):
<ImageView android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:layout_centerInParent="true" android:scaleType="centerCrop" android:contentDescription="ImageView"/>
4. Kotlin Activity Code (MainActivity.kt
)
package com.example.glidefix import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.Glide import com.example.glidefix.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val imageUrl = "https://example.com/image.jpg" // Ensure this URL is valid loadImage(imageUrl) } private fun loadImage(url: String) { Glide.with(this) .load(url) .placeholder(R.drawable.placeholder) .error(R.drawable.error_image) .into(binding.imageView) } }
5. Additional Tips
- Make sure the URL is reachable in the browser.
- Use
.placeholder()
and.error()
to help debug. - Use
Glide.with(applicationContext)
only if inside non-UI class. - For dynamic URLs or RecyclerView, ensure
ViewHolder
usesitemView.context
.
For more detailed documentation, you can visit the official Glide GitHub repository.