Ich versuche, diese RetroFit + Otto tutorial zu aktualisieren, so dass mein Code aktualisiert ist:java.lang. RuntimeException Keine Annotation für Retrofit gefunden. (Parameter # 3)
IWeather.java
RetroFit 2. + erlaubt es nicht, void
zurückzukehren, so statt void getWeather(...)
Ich habe Call<Weather> getWeather(...)
hinzugefügt.
public interface IWeather {
@GET("/{latitude},{longitude}")
Call<Weather> getWeather(@Path("latitude") String latitude,
@Path("longitude") String longitude,
Callback<Weather> callback);
}
ForecastClient.java
RetroFit 2. + hat seinen Konstruktor geändert, so dass die neue ForecastClient
hat die nächste Form. Die IllegalArgumentException
verweist auf die weather.getWeather(...)
Methode.
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<Weather> 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<Weather> callback = new Callback<Weather>() {
@Override
public void onResponse(Call<Weather> call, Response<Weather> response) {
Log.d(ForecastManager.class.getSimpleName(), response.body().toString());
mBus.post(new SendWeatherEvent(response.body()));
}
@Override
public void onFailure(Call<Weather> call, Throwable t) {
Log.e(ForecastManager.class.getSimpleName(), t.getMessage());
}
};
sForecastClient.getWeather(latitude, longitude, callback);
}
}
Ich bin eine No Retrofit Anmerkung gefunden zu empfangen und ich denke, der Grund, warum etwas ist, mit meinem Rückruf verwendet, aber es ist ein RetroFit Rückruf, so dass ich don verstehe nicht warum der Fehler.
stacktrace verweist auf die MainActivity, insbesondere an der Otto-Verfahren post()
mit einem java.lang.RuntimeException: Could not dispatch event
, durch den Fehler verursacht hat zuvor erwähnt 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());
}
Jeder Hinweis darüber, wo ist der Fehler oder wie soll ich mit den Busabonnements, dem Rückruf usw. umgehen?
Es funktioniert wie ein Charme. Ich bin ziemlich neu mit Otto und RetroFit und alle Tutorials verwenden alte Versionen dieser Bibliotheken. –
Die meisten Bibliotheken von square haben ziemlich gute Beispiele auf ihren Projektseiten, Sie sollten sie vor den Tutorials bei der Verwendung von Bibliotheken verwenden. – Kiskae