Я использую Retrofit-2.0.0
для своего приложения. Теперь каждый учебник по Retrofit, который я нашел в Интернете, основан на более раннем Retrofit
и там не было интерфейса Call<T>
. Это первый раз, когда я использую Retrofit, и я неоднократно получаю null object reference
. Вот мой интерфейс сетевой модели
public interface TMovieDBService {
@GET("/movie")
Call<MovieResponse> getMovieResponse(@Query("sort_by") String sortKey,
@Query("api_key") String apiKey);
}
И это моя функция updateMovies()
, которая обновляет список фильмов.
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();
}
});
}
Я не знаю, что реализовать в функции enqueue. На обновленном веб-сайте очень мало информации о том, как использовать обратный вызов. Предположим, что все остальные коды работают нормально. Здесь объект MovieResponse
возвращается API-интерфейсом movieDB, который содержит массив Movie
и некоторую дополнительную информацию. Я реализую его таким образом, чтобы после получения ответа от MovieResponse
оттуда я смог извлечь с помощью getMovies()
, который вернет список фильмов.
Когда я запускаю, я просто получаю null object reference
, потому что response
имеет значение null. Я попытался найти учебники по использованию нового Retrofit-2.0.0
, особенно при использовании функции enqueue, но мне не повезло. Плюс еще один вопрос, куда следует вызывать updateMovies()
. Могу ли я вызвать его непосредственно в mainactivity. Модернизируется ли автоматический запуск сетевого вызова в фоновом потоке?