Ich verwende Retrofit-2.0.0
für meine App. Jetzt basiert jedes Tutorial zu Retrofit, das ich im Web gefunden habe, auf früheren Retrofit
und es gab keine Call<T>
Schnittstelle dort. Dies ist das erste Mal, dass ich Retrofit verwende und ich bekomme wiederholt null object reference
. Hier ist mein Netzwerk-Modell-SchnittstelleVerwenden von Call Enqueue Funktion in Retrofit
public interface TMovieDBService {
@GET("/movie")
Call<MovieResponse> getMovieResponse(@Query("sort_by") String sortKey,
@Query("api_key") String apiKey);
}
Und das ist meine updateMovies()
Funktion, die die Liste der Filme aktualisiert.
void updateMovies() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.themoviedb.org/3/discover")
.addConverterFactory(GsonConverterFactory.create())
.build();
String sortKey = "popularity.desc";
TMovieDBService service = retrofit.create(TMovieDBService.class);
Call<MovieResponse> call = service.getMovieResponse(sortKey, ApiKey.API_KEY);
call.enqueue(new Callback<MovieResponse>() {
@Override
public void onResponse(Response<MovieResponse> response) {
Log.d(LOG_TAG, "Reached this place");
if (!response.isSuccess()) {
Log.d(LOG_TAG, "No Success");
}
mMovieList = response.body().getMovies(); // <- response is null here
// Log.d(LOG_TAG, "Couldn't not reach this place");
mMovieAdapter.notifyDataSetChanged();
Log.d(LOG_TAG, "Response returned by website is : " + response.code());
}
@Override
public void onFailure(Throwable t) {
// Toast for the moment
// Appropriate error handling code should be present here
Toast.makeText(getActivity(), "Failed !", Toast.LENGTH_LONG).show();
}
});
}
Ich weiß nicht, was in der Enqueue-Funktion zu implementieren ist. Auf der Retrofit-Website wird nur sehr wenig über die Verwendung des Rückrufs berichtet. Angenommen, der gesamte andere Code funktioniert einwandfrei. Hier wird MovieResponse
Objekt von der MovieDB-API zurückgegeben, die ein Array von Movie
s und einige zusätzliche Informationen enthält. Ich implementiere es so, dass, sobald ich die Antwort in MovieResponse
von dort bekomme ich extrahieren kann mit der getMovies()
, die eine Liste von Filmen zurückgeben wird.
Wenn ich laufe ich einfach null object reference
, weil response
ist null. Ich habe versucht, Tutorials zur Verwendung von neuen Retrofit-2.0.0
insbesondere auf Enqueue-Funktion zu suchen, aber ich bin kein Glück. Plus eine weitere Frage wo sollte der updateMovies()
aufgerufen werden. Kann ich es direkt in der Mainactivity nennen. Führt Retrofit den Netzwerkanruf automatisch auf Hintergrundthread aus?
https://github.com/square/retrofit/releases/tag/parent-2.0.0-beta1 ↑ Diese Beta-Version ist, so dass ich denke, Sie sollten Verwenden Sie stattdessen die Retrofit-Version 1.9.0 (die neueste stabile Release-Version). –
Ich bin auch mit dem gleichen Problem konfrontiert. Hast du irgendeine Lösung? – Govan
Ähnliche Fragen und Antworten: http://stackoverflow.com/questions/33202871/retrofit-error-2-0-2-beta-error-in-callback-does-not-override-abstract-method-on –