#java #android #retrofit
#java #Android #модернизация
Вопрос:
Как упоминалось в вопросе, мне нужно создать интерфейс API для модернизации. Это мой URL :
https://api.flightstats.com/flex/weather/rest/v1/json/all/COK?appId=XXXXXXXXXamp;appKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXamp;codeType=IATA
//--------------------------------------------------------^^^--------------------------------------------------------------------
Как отмечено выше, проблема заключается в позиции COK
, которая является кодом airport, и мне нужно передать ее в запросе, однако я не могу передать ее в моей реализации создания интерфейса retrofit. Это мой код:
WeatherApiClient.class
public class WeatherApiClient {
public static final String BASE_URL = "https://api.flightstats.com/flex/weather/rest/v1/json/all/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
WeatherApiInterface.class
public interface WeatherApiInterface {
@GET("COK") // this should be dynamic
Call<WeatherPojo> getValues(@Query("appId") String appId, @Query("appKey") String key, @Query("codeType") String code);
}
Как я должен изменить свой код, чтобы я мог передавать код airport также при выполнении запроса?
Комментарии:
1. Я не очень хорошо разбираюсь в модернизации, но как насчет добавления «COK» в getValues()? И вам нужен ключ запроса для позиции. (В строке запроса должно быть someKey=COK.)
2. И, возможно, @Get(«.») или что-то в этом роде.
Ответ №1:
В качестве вашего вопроса вы уже создали экземпляр Retrofit.
public static final String BASE_URL = "https://api.flightstats.com/flex/weather/rest/v1/json/all/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
Вы также упоминаете в своем коде конечную точку.В этом коде подробно описывается
параметр и метод запроса.
public interface WeatherApiInterface
{ @GET("COK")
//----^^^--
Call<WeatherPojo> getValues(@Query("appId") String appId, @Query("appKey") String key, @Query("codeType") String code);
}
Но в вашем коде отсутствует часть, это ваша асинхронная операция.Поместите этот код в свой класс activity.
ApiInterface apiService =
ApiClient.getClient().create(WeatherApiInterface.class);
Call<WeatherPojo> call = apiService.getValues(appId,appKey,codeType);
call.enqueue(new Callback<WeatherPojo>() {
@Override
public void onResponse(Call<WeatherPojo>call, Response<WeatherPojo> response) {
List<Movie> movies = response.body().getResults();
Log.d(TAG, "Number of movies received: " movies.size());
}
@Override
public void onFailure(Call<WeatherPojo>call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
Ответ №2:
Попробуйте этот intreface
код,
public interface WeatherApiInterface{
@GET("{id}")
Call<WeatherPojo> getValues(@Path("id") String airportId, @Query("appId") String appId, @Query("appKey") String key, @Query("codeType") String code);
}
Вы не показали, как вы вызываете это. Итак, я предполагаю, что это нормально.
Комментарии:
1. В чем ошибка? Для меня это просто прелесть. Должен ли я добавить весь свой код?