На моем сервере работает 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 на моем компьютере?
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();
}
});
Надеюсь, понятно, как это реализовать!
Я рекомендую вам использовать Retrofit, вы можете использовать Retrofit? Это легко, и я могу показать вам, как
Конечно, вы можете показать мне, как будет выглядеть код в моем случае?
Спасибо, очень полезный ответ.
Вместо localhost используйте IP-адрес вашего компьютера. Сначала убедитесь, что ваше устройство Android и компьютер находятся в одной сети. Вы можете сделать это, просто подключив свой компьютер к мобильной точке доступа. Затем запустите команду ipconfig в Windows или ifconfig в Linux. Получите оттуда IP-адрес своего устройства и используйте его в своем коде Android. Также изучите основы, поскольку localhost означает адрес обратной связи вашего устройства.
Я использовал IP-адрес, но теперь получил эту ошибку:
GET request for "http://192.168.0.176:8080" resulted in 404 (); invoking error handler. Кстати, если я использую инструмент Postman, я могу нажать GET api.