Как создать интерфейс API для модернизации?

#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. В чем ошибка? Для меня это просто прелесть. Должен ли я добавить весь свой код?