I'm trying to make my App connect to a local web service using Retrofit 2 but i'm always getting this error. I'm sure the web service is responding because i'm using a tool in firefox that make the @GET request and the return is OK, returns me the correct JSON.
In android it doesn't even connect.
This is my MainActivity:
public class MainActivity extends AppCompatActivity {
    private String API_BASE_URL="http://192.168.1.32:8080/economarket-restService/resources/androidTest/";           
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();            
        Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create());
        Retrofit retrofit = builder.client(
                httpClient.build()
        ).build();
        ContatoService contato = retrofit.create(ContatoService.class); 
        Call<Contato> repos = contato.listRespos(); //EconomarketService                 
        repos.enqueue(new Callback<Contato>() {
            @Override
            public void onResponse(Call<Contato> call, Response<Contato> response) {
                Contato contato = response.body();
                Toast.makeText(getBaseContext(), "Return" + contato.getName(), Toast.LENGTH_LONG).show();
                Log.d("Retorno",response.toString());
            }
            @Override
            public void onFailure(Call<Contato> call, Throwable t) {
                Toast.makeText(getBaseContext(), "Return" + t.toString(), Toast.LENGTH_LONG).show();
                Log.d("Retorno",t.toString());
            }
        });                    
    }        
}
My Interface:
public interface ContatoService {
    @GET("retorna/")
    Call<Contato>  listRespos();
}
Model classes (Contato):
public class Contato  {
    @SerializedName("name")
    private String name;
    @SerializedName("phone")
    private int phone;
    @SerializedName("likes")
    private int likes;
    @SerializedName("location")
    private Location location;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPhone() {
        return phone;
    }
    public void setPhone(int phone) {
        this.phone = phone;
    }
    public int getLikes() {
        return likes;
    }
    public void setLikes(int likes) {
        this.likes = likes;
    }
    public Location getLocation() {
        return location;
    }
    public void setLocation(Location location) {
        this.location = location;
    }
}
Model Class (Location):
public class Location{
}
Problem solved! The problem was the API_BASE_URL, the url should have only:
http://192.168.1.32:8080/
And the rest of the url should be on the interface:
@GET("economarket-restService/resources/androidTest/retorna/").
It all boils down to declare the root of the URL in the URL_BASE and the url directory access must be on the interface.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With