Непроверенный вызов метода как члена типа 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
Вы можете получить.