Как сделать GET с Android на Spring Backend - PullRequest
0 голосов
/ 03 октября 2018

Мой сервер работает под управлением 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 запрос для "http://localhost:8080": не удалось подключиться к localhost / 127.0.0.1(порт 8080): ошибка подключения: ECONNREFUSED (соединение отклонено);

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

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

0 голосов
/ 03 октября 2018

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

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

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

То есть ваш BASE_URL должен выглядеть примерно так:

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

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

Конечно!

Прежде всего добавьте это в ваш 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();
            }
        });

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...