Непроверенный вызов метода как члена типа raw

Следующее предупреждение отображается в моем проекте -

Непроверенный вызов getWeatherData(T,Boolean,String) как члена необработанного типа "IWeatherCallbackListener".

Я создал следующий интерфейс -

public interface IWeatherCallbackListener<T> {
 void getWeatherData(T weatherModel, Boolean success, String errorMsg);
}

И назвал это следующим образом,

public class WeatherConditions {

private static IWeatherApi mWeatherApi;

/**
 * @param city
 * @param appId
 * @param listener
 */
public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener listener) {

    mWeatherApi = ApiService.getRetrofitInstance(BASE_URL_OPEN_WEATHER).create(IWeatherApi.class);
    Call<OpenWeatherModel> resForgotPasswordCall = mWeatherApi.getOpenWeatherData(appId, city);
    resForgotPasswordCall.enqueue(new Callback<OpenWeatherModel>() {
        @Override
        public void onResponse(Call<OpenWeatherModel> call, Response<OpenWeatherModel> response) {
            if (response.body() != null) {
                if (listener != null)
                    listener.getWeatherData(response.body(), true, "");
            }
        }

        @Override
        public void onFailure(Call<OpenWeatherModel> call, Throwable t) {
            if (listener != null)
                 listener.getWeatherData(null, false, t.getMessage());
        }
    });
}

Я реализовал этот интерфейс в моей MainActivity и назвал метод как -

WeatherConditions.getOpenWeatherData(etCityName.getText().toString(), OPEN_WEATHER_APP_ID, MainActivity.this)

Может кто-нибудь, пожалуйста, помогите и объясните это предупреждение.

1 ответ

Решение

Похоже, вы должны объявить T типа, в вашем случае это должен быть класс response.body() пример.

Попробуйте заменить строку

public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener listener)

в

public static void getOpenWeatherData(String city, String appId, IWeatherCallbackListener<ResponseBody> listener)

Это так, потому что, когда вы объявляете свой интерфейс

IWeatherCallbackListener<T>

Вы используете T и его необработанный тип. Когда вы создаете экземпляр, вы должны показать, какой именно тип вы будете использовать или какой именно тип вы хотите получить в качестве аргумента.

Например, если вы создаете тот слушатель вручную, который должен был выглядеть следующим образом

IWeatherCallbackListener<ResponseBody> listener = new IWeatherCallbackListener<ResponseBody>() {
    //implementation of methods
}

То же самое для аргументов, вы должны показать, что T Вы можете получить.

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