2017-08-23 12 views
0

Je construis une application pour tester Rénovation et CardView, RecyclerView et Glide. J'ai cet objet « Point » où je définis les attributs d'un film:types incompatibles: Liste <Movie> ne peuvent pas être convertis à la liste <Item>

public class Item { 
    @SerializedName("poster_path") 
    private String posterPath; 
    @SerializedName("adult") 
    private boolean adult; 
    @SerializedName("overview") 
    private String overview; 
    @SerializedName("release_date") 
    private String releaseDate; 
    @SerializedName("genre_ids") 
    private List<Integer> genreIds = new ArrayList<Integer>(); 
    @SerializedName("id") 
    private Integer id; 
    @SerializedName("original_title") 
    private String originalTitle; 
    @SerializedName("original_language") 
    private String originalLanguage; 
    @SerializedName("title") 
    private String title; 
    @SerializedName("backdrop_path") 
    private String backdropPath; 
    @SerializedName("popularity") 
    private Double popularity; 
    @SerializedName("vote_count") 
    private Integer voteCount; 
    @SerializedName("video") 
    private Boolean video; 
    @SerializedName("vote_average") 
    private Double voteAverage; 

    public Item(String posterPath, boolean adult, String overview, String releaseDate, List<Integer> genreIds, Integer id, 
        String originalTitle, String originalLanguage, String title, String backdropPath, Double popularity, 
        Integer voteCount, Boolean video, Double voteAverage) { 
     this.posterPath = posterPath; 
     this.adult = adult; 
     this.overview = overview; 
     this.releaseDate = releaseDate; 
     this.genreIds = genreIds; 
     this.id = id; 
     this.originalTitle = originalTitle; 
     this.originalLanguage = originalLanguage; 
     this.title = title; 
     this.backdropPath = backdropPath; 
     this.popularity = popularity; 
     this.voteCount = voteCount; 
     this.video = video; 
     this.voteAverage = voteAverage; 
    } 

    public String getPosterPath() { 
     return posterPath; 
    } 

    public void setPosterPath(String posterPath) { 
     this.posterPath = posterPath; 
    } 

    public boolean isAdult() { 
     return adult; 
    } 

    public void setAdult(boolean adult) { 
     this.adult = adult; 
    } 

    public String getOverview() { 
     return overview; 
    } 

    public void setOverview(String overview) { 
     this.overview = overview; 
    } 

    public String getReleaseDate() { 
     return releaseDate; 
    } 

    public void setReleaseDate(String releaseDate) { 
     this.releaseDate = releaseDate; 
    } 

    public List<Integer> getGenreIds() { 
     return genreIds; 
    } 

    public void setGenreIds(List<Integer> genreIds) { 
     this.genreIds = genreIds; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getOriginalTitle() { 
     return originalTitle; 
    } 

    public void setOriginalTitle(String originalTitle) { 
     this.originalTitle = originalTitle; 
    } 

    public String getOriginalLanguage() { 
     return originalLanguage; 
    } 

    public void setOriginalLanguage(String originalLanguage) { 
     this.originalLanguage = originalLanguage; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getBackdropPath() { 
     return backdropPath; 
    } 

    public void setBackdropPath(String backdropPath) { 
     this.backdropPath = backdropPath; 
    } 

    public Double getPopularity() { 
     return popularity; 
    } 

    public void setPopularity(Double popularity) { 
     this.popularity = popularity; 
    } 

    public Integer getVoteCount() { 
     return voteCount; 
    } 

    public void setVoteCount(Integer voteCount) { 
     this.voteCount = voteCount; 
    } 

    public Boolean getVideo() { 
     return video; 
    } 

    public void setVideo(Boolean video) { 
     this.video = video; 
    } 

    public Double getVoteAverage() { 
     return voteAverage; 
    } 

    public void setVoteAverage(Double voteAverage) { 
     this.voteAverage = voteAverage; 
    } 
} 

Et à l'intérieur MainActivity Je déclare cette liste d'articles:

private List<Item> movies; 

Plus tard dans la méthode onCreate j'appelle cette méthode pour demander des données de l'API imdb:

ApiInterface apiService = 
       ApiClient.getClient().create(ApiInterface.class); 

     Call<MoviesResponse> call = apiService.getTopRatedMovies(API_KEY); 
     call.enqueue(new Callback<MoviesResponse>() { 
      @Override 
      public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) { 
       int statusCode = response.code(); 
       movies = response.body().getResults(); 
       //recyclerView.setAdapter(new MoviesAdapter(movies, R.layout.list_item_movie, context)); 

      } 

      @Override 
      public void onFailure(Call<MoviesResponse> call, Throwable t) { 
       // Log error here since request failed 
       Log.e(TAG, t.toString()); 
      } 
     }); 

Je suis en train d'insérer toutes les données de l'API dans la liste des « films », mais le problème est que je reçois une erreur qui dit t Cette liste de 'films' vient de android.graphics.Movie au lieu de mon objet de classe. Et je ne sais pas pourquoi. Comment puis-je réparer cela?

Edit:

Message d'erreur

Executing tasks: [:app:assembleDebug] 

Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead. 
:app:buildInfoDebugLoader 
:app:preBuild UP-TO-DATE 
:app:preDebugBuild UP-TO-DATE 
:app:compileDebugAidl UP-TO-DATE 
:app:compileDebugRenderscript UP-TO-DATE 
:app:checkDebugManifest UP-TO-DATE 
:app:generateDebugBuildConfig UP-TO-DATE 
:app:generateDebugResValues UP-TO-DATE 
:app:generateDebugResources UP-TO-DATE 
:app:mergeDebugResources UP-TO-DATE 
:app:createDebugCompatibleScreenManifests UP-TO-DATE 
:app:processDebugManifest UP-TO-DATE 
:app:splitsDiscoveryTaskDebug UP-TO-DATE 
:app:processDebugResources UP-TO-DATE 
:app:generateDebugSources 
:app:javaPreCompileDebug UP-TO-DATE 
:app:compileDebugJavaWithJavac 
/Users/Mvaguimaraes/Documents/Android Projects/MusicAppCardView/app/src/main/java/com/example/mvaguimaraes/musicappcardview/MainActivity.java:86: error: incompatible types: List<Movie> cannot be converted to List<Item> 
       movies = response.body().getResults(); 
               ^
1 error 

FAILED 
:app:buildInfoGeneratorDebug 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:compileDebugJavaWithJavac'. 
> Compilation failed; see the compiler error output for details. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

* Get more help at https://help.gradle.org 

BUILD FAILED in 17s 

15 actionable tasks: 3 executed, 12 up-to-date 
+0

S'il vous plaît attachez votre logcat si possible – Mandy8055

+0

Merci pour la réponse. Le projet ne parvient pas à générer pour afficher l'erreur dans le logcat, mais j'ai mis à jour la question avec le message d'erreur étendu de la console Gradle. –

Répondre

2

Cela signifie que vous avez importé la mauvaise classe Movie quelque part.

Vérifiez vos services Retrofit si vous avez inclus une importation pour

import android.graphics.Movie; 

quelque part au lieu de votre propre modèle.

Doublecheck votre service Rénovation ApiInterface si vous avez la liste ou seulement une liste générique en tant que valeur de retour au lieu de

List<Item> 

Cela signifie assurez-vous qu'il est quelque chose comme

@GET("your/path") 
Call<List<Item>> listItems(); 

au lieu de

@GET("your/path") 
Call<List> listItems(); 

ou

@GET("your/path") 
Call<List<Movie>> listItems(); 
+0

Merci pour l'aide, Apparemment AndroidStudio a automatiquement importé le android.graphics.Movie dans la classe MovieResponse à la place de ma classe Item (qui s'appelait précédemment Movie). –

+0

Cela provoquait l'erreur dans MainActivity. –

+1

Problème courant ;-) Se produira souvent dans votre temps en tant que développeur. Croyez-moi dans ce cas;) –