私のプロジェクトでは次の警告が表示されます-
生のタイプ「IWeatherCallbackListener」のメンバーとしての「getWeatherData(T、Boolean、String)」への未チェックの呼び出し。
私は次のインターフェイスを作成しました-
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)
誰でもこの警告を助けて説明できますか?.
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とその生の型を使用します。インスタンスを作成する場合、使用するexactlyタイプ、または引数として受け取る正確なタイプを表示する必要があります。
たとえば、このように見える必要があるリスナーを手動で作成する場合
IWeatherCallbackListener<ResponseBody> listener = new IWeatherCallbackListener<ResponseBody>() {
//implementation of methods
}
引数についても同じことが言えます。どのT
を受け取ることができるかを示す必要があります。