Hello,  I want get the objects from users array fr...
# android
h
Hello,  I want get the objects from users array from API using Moshi , but I get this error  'Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $'. What mistake I made? Thanks in advance.
Copy code
{
  "users": [
    {
      "id": "1",
      "name": "Bill Roy",
    },
     {
      "id": "2",
      "name": "Ben Bush",
    },
    {
      "id": "3",
      "name": "Dan Fox",
    },

  ]
}
User.kt
Copy code
data class User(
    @Json(name = "id")
    val id: Int = 0,
    @Json(name = "name")
    val name: String = "",
    @Json(name = "users")
    val userList: List<User>
)
ApiService.kt
Copy code
interface ApiService {
    @GET("getUsers")
    suspend fun getUsers(): Response<List<User>>
}
😶 6
c
1. Post code snippets inside the thread, please 2. This is not kotlin related 3. Your response is not a list of
User
. You receive an object with a property
users
that is a list of
User.
👍 3
h
@Chrimaeon thanks for your reply. I have changed my code. Please, say is ViewModel correct?
Copy code
data class User(
    @Json(name = "id")
    val id: Int = 0,
    @Json(name = "name")
    val name: String = ""
)
data class UserResponse(
    @Json(name = "users")
    val userList: List<User>
)
MainViewModel.kt
Copy code
@HiltViewModel
 class MainViewModel @Inject constructor(
    private val mainRepository: MainRepository,
    private val networkHelper: NetworkHelper
) : ViewModel() {
    private val _users = MutableLiveData<Resource<UserResponse>>()
    val users: LiveData<Resource<UserResponse>>
        get() = _users
    init {
        fetchUsers()
    }
    private fun fetchUsers() {
        viewModelScope.launch {
            _users.postValue(Resource.loading(null))
            if (networkHelper.isNetworkConnected()) {
                mainRepository.getUsers().let {
                    if (it.isSuccessful) {
                        _users.postValue(Resource.success(it.body()))
                    } else _users.postValue(Resource.error(it.errorBody().toString(), null))
                }
            } else _users.postValue(Resource.error("No internet connection", null))
        }
    }
}