web-dev-qa-db-fra.com

Appel non vérifié à la méthode en tant que membre de type brut

L'avertissement suivant est affiché dans mon projet -

Appel non vérifié à "getWeatherData (T, Boolean, String)" en tant que membre de type brut "IWeatherCallbackListener".

J'ai créé l'interface suivante -

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

Et l'a appelé de la manière suivante,

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());
        }
    });
}

J'ai implémenté cette interface dans mon MainActivity et appelé la méthode comme -

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

Quelqu'un peut-il aider et expliquer cet avertissement.

8
Akash Bisariya

Il semble que vous devez également déclarer votre type T, dans votre cas, il doit s'agir d'une classe d'instance response.body().

Essayez de remplacer la ligne

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

à

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

En effet, lorsque vous déclarez votre interface

IWeatherCallbackListener<T>

Vous utilisez T et son type brut. Lorsque vous créez une instance, vous devez montrer quel type exactement vous utiliserez ou quel type exactement vous voulez recevoir comme argument.

Par exemple, si vous créez manuellement cet écouteur qui devait ressembler à ceci

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

Même chose pour les arguments, vous devez montrer ce que T vous pouvez recevoir.

9
Andrey Danilov