Как выполнить GET с Android на Spring Backend

На моем сервере работает Spring Boot. Мне нужно нажать на этот URL

localhost:8080/api/v1/animals

Результатом будет файл Json.

Из своего приложения для Android я пытаюсь получить всех этих животных. Вот что я пытаюсь:

public class AnimalsTask extends AsyncTask
{
    @Override
    protected Object doInBackground(Object[] objects)
    {
        RestTemplate rest = new RestTemplate();
        rest.getMessageConverters().add(new StringHttpMessageConverter());

        String result = rest.getForObject("http://localhost:8080", String.class, "/api/v1/animals");

        return null;
    }
}

Это дает мне ошибку:

GET request for "http://localhost:8080": failed to connect to localhost/127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused);

Могу ли я тестировать со своего телефона Android при запуске веб-приложения Spring на моем компьютере?

1
0
1 293
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Can I test from my Android phone while running the Spring web app on my computer?

Да, конечно, можете, убедитесь, что вы подключены к той же сети Wi-Fi.

Одна важная вещь, которую вам нужно сделать, - это перейти на Terminal, поставить ipconfig и получить оттуда свой IP-адрес, а затем с устройства или из вашей Android Studio просто изменить localhost на yourIP:8080.

Итак, ваш BASE_URL должен быть примерно таким:

public static final String BASE_URL = "http://192.168.0.171:8080/";

Sure, can you show me how the code would look for my case?

Конечно!

Прежде всего добавьте это в свой build.gradle

implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

Затем создайте класс под названием ApiClient

class APIClient {

private static Retrofit retrofit = null;
static Retrofit getClient() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
    retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.0.176:8080/")
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
    return retrofit;
}

}

Затем создайте еще один класс с именем APIInterface

interface APIInterface {
  @GET("/api/v1/animals")
  Call<YOURPOJOCLASS> getAnimals();

YOURPOJO класс может быть выполнен с помощью этого jsonschema2pojo, выбрав GSON, а в Preview вы можете скопировать и вставить свой класс pojo.

Тогда способ, которым вы его называете, очень прост:

APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);

Call<YOURPOJOCLASS> call = apiInterface.getAnimals();
        call.enqueue(new Callback<YOURPOJOCLASS>() {
            @Override
            public void onResponse(Call<YOURPOJOCLASS> call, Response<YOURPOJOCLASS> response) {

                YOURPOJOCLASS pojoclass = response.body();

            }

            @Override
            public void onFailure(Call<UserList> call, Throwable t) {
                call.cancel();
            }
        });

Надеюсь, понятно, как это реализовать!

Я использовал IP-адрес, но теперь получил эту ошибку: GET request for "http://192.168.0.176:8080" resulted in 404 (); invoking error handler. Кстати, если я использую инструмент Postman, я могу нажать GET api.

J_Strauton 03.10.2018 21:04

Я рекомендую вам использовать Retrofit, вы можете использовать Retrofit? Это легко, и я могу показать вам, как

Skizo-ozᴉʞS 03.10.2018 21:06

Конечно, вы можете показать мне, как будет выглядеть код в моем случае?

J_Strauton 03.10.2018 21:11

Спасибо, очень полезный ответ.

J_Strauton 03.10.2018 22:50

Вместо localhost используйте IP-адрес вашего компьютера. Сначала убедитесь, что ваше устройство Android и компьютер находятся в одной сети. Вы можете сделать это, просто подключив свой компьютер к мобильной точке доступа. Затем запустите команду ipconfig в Windows или ifconfig в Linux. Получите оттуда IP-адрес своего устройства и используйте его в своем коде Android. Также изучите основы, поскольку localhost означает адрес обратной связи вашего устройства.

Другие вопросы по теме