If your Kotlin app using Retrofit isn’t making any network calls, it can be frustrating, especially during debugging or while building production-level apps. This issue often arises due to misconfigurations in Retrofit setup, incorrect coroutine usage, or missing permissions in AndroidManifest.xml. Here’s a step-by-step guide to fix it with a working example.

Step 1: Add Required Dependencies
Make sure you’ve added the correct Retrofit and converter dependencies in your build.gradle file:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1'
Step 2: Add Internet Permission
Update your AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
Step 3: Create Data Model
data class Post(
val userId: Int,
val id: Int,
val title: String,
val body: String
)
Step 4: Define Retrofit API Interface
import retrofit2.http.GET
import retrofit2.Response
interface ApiService {
@GET("posts")
suspend fun getPosts(): Response<List<Post>>
}
Step 5: Build Retrofit Instance
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
val instance: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
Step 6: Call API in ViewModel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
class MainViewModel : ViewModel() {
fun fetchPosts() {
viewModelScope.launch {
try {
val response = RetrofitClient.instance.getPosts()
if (response.isSuccessful) {
val posts = response.body()
println("Success: ${posts?.size} posts loaded")
} else {
println("Error: ${response.code()}")
}
} catch (e: Exception) {
println("Exception: ${e.message}")
}
}
}
}
Step 7: Trigger the Network Call in Activity
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.viewModels
class MainActivity : ComponentActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.fetchPosts()
}
}
Common Mistakes That Cause No Network Calls:
- Missing
INTERNETpermission. - Not using
suspendfunctions in Retrofit interface. - Network call not triggered in
ViewModelScope. - Forgetting to set correct
baseUrl. - Network on main thread (if not using coroutines or proper async calls).
For further reading on common pitfalls, you can check out this useful Retrofit guide.
saya mau main game nya sekarang