Unable to resolve host con retrofit

di il
1 risposte

Unable to resolve host con retrofit

Ciao,

So sto provando a richiamare un API , tramiti retrofit.
L'url che io richiamo, si trova su un server, in cui in questi momento accedo vai VPN.
var urlConnection: String ="http://iswvgenint03/api/"
     var urlConnection: String ="http://172.20.26.375/api/"
Il token che io invio in questo momento é buono.
Io ho testato tutto tramite Postman e funziona correttamente .
Invece quando io richiamo tramite Android studio ricevo l'eccezione "retrofit unable to resolve host".
io ho effettuato varie modifiche al codice, secondo alcuni esempi trovati in rete, ma o non riesco a risolvere il problema.
Se lo stesso codice io l'utilizzo per accedere alle api pubbliche di "jsonplaceholder.typicode.com" tutto mi funziona correttamente.
Io arrivo sempre in onFailure

// var urlConnection: String ="http://iswvgenint03/api/"
     var urlConnection: String ="http://172.20.26.375/api/" 
     
     override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var miocontext = this.baseContext


    //  textViewResult= findViewById(R.id.text_view_result);


    val clientBuilder = OkHttpClient.Builder()
    var authTokenBearer ="Bearer eyJuYW1laWQiOiI2MzcxMCIsInVuaXF1ZV9uYW1lIjoiVXRpbGlzYXRldXJFdHVkZUlOb3RBY3Rlc18yNzAzNjAiLCJBc3BOZXQuSWRlbnRpdHkuU2VjdXJpdHlTdGFtcCI6IjMzMkEyMDFFLUJBQUItNDRF"

        @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 jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi::class.java)

    val call = jsonPlaceHolderApi.getClients()

    call.enqueue(object : Callback<List<Client>> {
        override fun onResponse(call: Call<List<Client>>, response: Response<List<Client>>) {
            if (!response.isSuccessful) {
                            return
            }

            val posts = response.body()!!
        }

        override fun onFailure(call: Call<List<Client>>, t: Throwable) {
            Log.d("errot",t.message)
        }
    })

}

I messaggi di errore che io ricevo sono
java.net.UnknownHostException: Unable to resolve host "iswvgenint03": No address associated with hostname
se utilizzo l'url

mentre
java.net.UnknownServiceException: CLEARTEXT communication to 172.20.26.375 not permitted by network security policy
se utilizzo l'indirizzo ip

Io penso che Android studio non riesce ad arrivare all'url tramite vpn.
Avete qualche soluzione per me?

1 Risposte

  • Re: Unable to resolve host con retrofit

    Io ho risolto aggiungendo al file manifest.xml questo codice
    
    
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        
        
        android:usesCleartextTraffic="true"
    

    Poi inseguito ho riscontrato che Retrofit non riusciva a risolvere l'url con la vpn dunque tutto ha funzionato con l'indirizzo ip
    e infine ho modificato la chiamata nell'interface

    da cosi
        @GET("Clients")
        fun getClients(): Call<ClientList>
    
    a cosi
        @GET("Clients/")
        fun getClients(): Call<ClientList>
    
Devi accedere o registrarti per scrivere nel forum
1 risposte