Ошибка 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)
Собственно вот и все, понимаю что кода все равно вышло много...Помогите разобраться пожалуйста, очень хочу понять что не так я делаю а спросить мне больше не у кого.