java.lang中。 RuntimeException未找到Retrofit注释。 (参数#3)

我正在尝试更新这个RetroFit + Otto教程 ,所以我的代码更新是:

IWeather.java

RetroFit 2. +不允许返回void ,所以我添加了Call getWeather(...)而不是void getWeather(...) Call getWeather(...)

 public interface IWeather { @GET("/{latitude},{longitude}") Call getWeather(@Path("latitude") String latitude, @Path("longitude") String longitude, Callback callback); } 

ForecastClient.java

RetroFit 2. +更改了他的构造函数,因此新的ForecastClient具有下一个表单。 IllegalArgumentException指向weather.getWeather(...)方法。

 public class ForecastClient { private static final String BASE_URL = "https://api.darksky.net/forecast/"; private static final String API_KEY = "******************"; public static final String API_URL = BASE_URL + API_KEY + "/"; private static ForecastClient mForecastClient; private static Retrofit mRetroAdapter; public static ForecastClient getClient() { if (mForecastClient == null) { mForecastClient = new ForecastClient(); } return mForecastClient; } private ForecastClient() { mRetroAdapter = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .client(new OkHttpClient()) .build(); } public void getWeather(String latitude, String longitude, Callback callback) { IWeather weather = mRetroAdapter.create(IWeather.class); weather.getWeather(latitude, longitude, callback); } } 

ForecastManager.java

 public class ForecastManager { private Context mContext; private Bus mBus; private ForecastClient sForecastClient; public ForecastManager(Context context, Bus bus) { this.mContext = context; this.mBus = bus; sForecastClient = ForecastClient.getClient(); } @Subscribe public void onGetWeatherEvent(GetWeatherEvent getWeatherEvent) { String latitude = Double.toString(getWeatherEvent.getLatitude()).trim(); String longitude = Double.toString(getWeatherEvent.getLongitude()).trim(); Callback callback = new Callback() { @Override public void onResponse(Call call, Response response) { Log.d(ForecastManager.class.getSimpleName(), response.body().toString()); mBus.post(new SendWeatherEvent(response.body())); } @Override public void onFailure(Call call, Throwable t) { Log.e(ForecastManager.class.getSimpleName(), t.getMessage()); } }; sForecastClient.getWeather(latitude, longitude, callback); } } 

我收到了一个N​​o Retrofit注释,我猜原因是与我的回调有关,但它是一个RetroFit回调,所以我不明白为什么错误。

stacktrace指向MainActivity,特别是指向带有java.lang.RuntimeException: Could not dispatch event的Otto方法post() java.lang.RuntimeException: Could not dispatch event ,由前面提到的错误引起java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #3) java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #3)

MainActivity.java

 public class MainActivity extends AppCompatActivity { @BindView(R.id.activity_main_textView) TextView textView; @BindView(R.id.activity_main_button) Button button; private static final double LATITUDE = **.******; private static final double LONGITUDE = **.******; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.activity_main_button) public void onClick(View view) { BusProvider.getInstace().post(new GetWeatherEvent(LATITUDE, LONGITUDE)); } @Subscribe public void onSendWeatherEvent(SendWeatherEvent sendWeatherEvent) { Weather weather = sendWeatherEvent.getWeather(); Currently currently = weather.getCurrently(); textView.setText(currently.getSummary()); } 

关于错误在哪里或者我应该如何处理总线订阅,回调等等的任何线索?

java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #3)

正如错误所说,问题是getWeather方法的第三个参数没有注释。 Callback类用于Call#enqueue(Callback)方法。

只需将sForecastClient.getWeather(latitude, longitude, callback)更改为sForecastClient.getWeather(latitude, longitude).enqueue(callback)并删除第三个参数。