25
Фев
2021

Ошибка Unable to start activity ComponentInfo cannot be cast to com.example.mycinemaapp.models.TVShowDetails

Есть приложение которое выводит информацию про фильмы с помощью REST-API на основе паттерна MVVM.Приложение уже выводит в Ресайкл фильмы, но детальную информацию я почему то не получаю.Я уверен что что-то не правильно написал в классе Api-Client.Но что не так понять не могу именно поэтому прошу вашей помощи в этом нелегком деле изучение программирования =) Получается в интерфейсе Movie-api я указал

// Details
// https://www.episodate.com/api/show-details?q=29560
@GET("https://www.episodate.com/api/show-details")
Call<MovieDetailsResponse> movieDetails(
  @Query("q") String query
);

Что бы не грузить вас кодом я покажу только класс MovieApiClient и часть кода из активити MovieDetails.Так как в классах Response, Repository и MovieListViewModel я уверен там ничего сложного нет.И сразу уточню что класс TVShowDetails - это модель детальной информации.

 public class MovieApiClient {

 private MutableLiveData<List<TVShowDetails>> mDetailsMovies;
 private RetrieveMoviesDetails retrieveMoviesDetails;

  public static MovieApiClient getInstance() {
    if(instance == null){
        instance = new MovieApiClient();
    }
    return instance;
}

private MovieApiClient() {
    mMovies = new MutableLiveData<>();
    mDetailsMovies = new MutableLiveData<>();
}

public LiveData<List<TVShowDetails>> getTvShowDetails() {
    return mDetailsMovies;
}

public void movieDetails(String query){

    if(retrieveMoviesDetails != null){
        retrieveMoviesDetails = null;
    }

retrieveMoviesDetails = new RetrieveMoviesDetails(query);
final Future myHandler = AppExecutors.getInstance().networkIO().submit(retrieveMoviesDetails);

    AppExecutors.getInstance().networkIO().schedule(new Runnable() {
        @Override
        public void run() {
            myHandler.cancel(true);
        }
    }, 4000, TimeUnit.MILLISECONDS );
}

private class RetrieveMoviesDetails implements Runnable{

    private String query;
    boolean cancelRequest;

    public RetrieveMoviesDetails(String query){
        this.query = query;
        cancelRequest = false;
    }

    @Override
    public void run() {
        // Получаем Response объекты
        try {
            Response response = getTvShowDetails(query).execute();
            if(cancelRequest){
                return;
            }
            if (response.code() == 200){

                List<TVShowDetails> list_tv_details = new ArrayList<>(((MovieDetailsResponse)response.body()).getList_tv_details());
                mDetailsMovies.postValue(list_tv_details);

            } else {
                String error_details = response.errorBody().string();
                Log.v("Tag", "Error code" +error_details);
                mDetailsMovies.postValue(null);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    private Call<MovieDetailsResponse> getTvShowDetails(String query){
        return Servicey.getMovieApi().movieDetails(query);
    }

    private void cancelRequest(){
        Log.v("Tag","Cancelling Search Request");
        cancelRequest = true;
    }

}

Я предполагаю что я ошибку допустил где-то в RetrieveMoviesDetails в run.Потому что именно тут я плохо ориентируюсь что происходит. И вот класс в котором я вывожу нужную мне информацию

private void getDataFromIntent() {
if(getIntent().hasExtra("movie")){
        MovieModel movieModel = getIntent().getParcelableExtra("movie"); // другая модель в ней инф. 
 только для начального экрана, детальной там нет, но что бы получить Постер, название подходит и оно 
 работает.
        TVShowDetails tvShowDetails = getIntent().getParcelableExtra("movie");
        description_movie.setText(tvShowDetails .getDescription());
}

Вот логи при запуске DetailsActivity

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mycinemaapp/com.example.mycinemaapp.MovieDetails}: java.lang.ClassCastException: com.example.mycinemaapp.models.MovieModel cannot be cast to com.example.mycinemaapp.models.TVShowDetails
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2511)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2571)
    at android.app.ActivityThread.access$900(ActivityThread.java:165)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1409)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:171)
    at android.app.ActivityThread.main(ActivityThread.java:5620)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
 Caused by: java.lang.ClassCastException: com.example.mycinemaapp.models.MovieModel cannot be cast to com.example.mycinemaapp.models.TVShowDetails
    at com.example.mycinemaapp.MovieDetails.getDataFromIntent(MovieDetails.java:60)
    at com.example.mycinemaapp.MovieDetails.onCreate(MovieDetails.java:33)
    at android.app.Activity.performCreate(Activity.java:6320)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1121)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)

Собственно вот и все, понимаю что кода все равно вышло много...Помогите разобраться пожалуйста, очень хочу понять что не так я делаю а спросить мне больше не у кого.

Источник: https://ru.stackoverflow.com/questions/1248492/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-unable-to-start-activity-componentinfo-cannot-be-cast-to-com-example-myci

Тебе может это понравится...

Добавить комментарий