Нет ответа от Retrofit2 - PullRequest
0 голосов
/ 26 мая 2020

Android здесь впервые. Я работаю над популярным приложением для фильмов, которое извлекает некоторые данные mov ie с перемещенного.org и отображает их пользователям при нажатии на эскиз mov ie. Недавно я две недели работал над модернизацией своего приложения. Я пытаюсь использовать шаблон MVVM. Моя цель - получить ответ от api.moviedb.org, чтобы в конечном итоге я мог отображать плакаты mov ie в режиме ресайклера. По какой-то причине я не могу получить ответ на вызов api с помощью модификации. Я думаю, что сделал что-то не так с настройкой дооснащения, но не могу понять, как я напортачил ... Я чувствую, что сильно застрял ... Любая помощь опытных разработчиков android будет очень благодарна :)

Ссылка Github на мой проект

Метод создания в MainActivity:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = findViewById(R.id.rvMovies);
        movieViewModel = ViewModelProviders.of(this).get(MovieViewModel.class);
//        Log.d("viewmodel", String.valueOf(movieViewModel));
        movieViewModel.getMoviesLiveData().observe(this, new Observer<MovieResult>() {
            @Override
            public void onChanged(MovieResult movieResult) {
                Log.d("movieResult", String.valueOf(movieResult));
            }
        });
    }

Класс ViewModel:

public class MovieViewModel extends AndroidViewModel {

    private MutableLiveData<MovieResult> movieLiveData;
    private MovieRepository movieRepository;

    public MovieViewModel(@NonNull Application application){
        super(application);
    }

    public void init(){
        if (movieLiveData != null){
            return;
        }
        movieRepository = MovieRepository.getInstance();
        movieLiveData = movieRepository.getMovies("api_key_here");
    }

    public LiveData<MovieResult> getMoviesLiveData() {
        init();
        return movieLiveData;
    }
}

Репозиторий:

public class MovieRepository {
    private static MovieRepository movieRepository;

    public static MovieRepository getInstance(){
        if (movieRepository == null){
            movieRepository = new MovieRepository();
        }
        return movieRepository;
    }

    private GetMovieService service;

    public MovieRepository(){
        service = RetrofitInstance.getRetrofitInstance().create(GetMovieService.class);
    }

    public MutableLiveData<MovieResult> getMovies(String api){
        Log.d("getmovies","called");
        final MutableLiveData<MovieResult> movieData = new MutableLiveData<>();
        service.getMovieResult(api).enqueue(new Callback<MovieResult>() {
            @Override
            public void onResponse(Call<MovieResult> call, Response<MovieResult> response) {
                if (response.isSuccessful()){
                    movieData.setValue(response.body());
                    Log.d("debug", String.valueOf(movieData));
                }
            }
            @Override
            public void onFailure(Call<MovieResult> call, Throwable t) {
                movieData.setValue(null);
                Log.d("onfailure","why");
            }
        });
        return movieData;
    }
}

RetrofitInstance:

public class RetrofitInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "http://api.themoviedb.org/3/";

    public static Retrofit getRetrofitInstance(){
        if(retrofit == null){
            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

GetMovieService. Java

public interface GetMovieService {
    @GET("movie/popular")
    Call<MovieResult> getMovieResult(@Query("api_key") String apiKey);
}

логический:

вывод журнала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...