Ciao a tutti
sto provando a richiamare delle api tramite Retrofil,
con il contenuto voglio riempire un listview.
Tutto mi riesce se riempio direttamente all'interno de onResponse la lista, se invece dalla classe dove ho la lista richiamo con una funzione la chiamata Retrofil la lista non si riempi
Vi posto il codice
all'interno di onCreate di ListView.kt ho
mentre nella classe ApiService ho questocodice:var listOfPosts = ArrayList<Client>() doAsync { val requestApi : ClientList = ApiService().GetClients(urlConnection, authTokenBearer) as ClientList var listJson = requestApi.clientList ?: emptyList() //// ScrollView for (_client in listJson) { listOfPosts.add( Client( _client.numero, _client.denomination, _client.typeClient, _client.id ) ) } var myUsersAdapter = PostsAdater( context ,listOfPosts) listUsers.adapter= myUsersAdapter }
Io ho aggiunto alla fine bodyResponse, ma credo che debba andare onResponsecodice:fun GetClients(urlConnection: String, authToken: String) : Any? { val clientBuilder = OkHttpClient.Builder() ///token Bearer val authTokenBearer = "Bearer " + authToken //Create a new Interceptor. val headerAuthorizationInterceptor: Interceptor = object : Interceptor { @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): okhttp3.Response? { val original = chain.request() val request = original.newBuilder() .header("Authorization", authTokenBearer) .method(original.method(), original.body()) .build() return chain.proceed(request) } } //Add the interceptor to the client builder. clientBuilder.addInterceptor(headerAuthorizationInterceptor) val client: OkHttpClient = clientBuilder.build() var retrofit = Retrofit.Builder() .baseUrl(urlConnection) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build() val jsonApi = retrofit.create(ClientApiJson::class.java) val call = jsonApi.getClients() var bodyResponse: Any? = null //JsonElement call.enqueue(object : Callback<ClientList> { override fun onResponse(call: Call<ClientList>, response: Response<ClientList>) { if (!response.isSuccessful) { Log.d("Error", " getClients !response.isSuccessful") return } val body = response.body()!! var listBody = response?.body()?.clientList ?: emptyList() bodyResponse = body } override fun onFailure(call: Call<ClientList>, t: Throwable) { Log.d("Error", t.message) } }) return bodyResponse } }
Credevo che doAsync attendeva la risposta della funzione per poter riempire la lista.
Potete darmi qualche suggerimento
Grazie

Rispondi quotando
