Я использую Dagger 2 в своем проекте, он работает хорошо, но теперь я изменил одну из моделей для ссылки на себя (имея родительское поле того же типа), и после этого мы не можем скомпилировать проект, и он сообщает
> error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public interface AppComponent {
Я использую проект github для имитации примера
Проблема может быть воспроизведена с использованием проекта ниже https://github.com/kioko/android-liveData-viewModel/issues/4
Все, что я сделал, это добавил собственную ссылку на модель.
Я понимаю, что кинжал-2 не допустит циклического внедрения, но здесь он является классом модели и не вводится напрямую где-либо, скорее это просто указывается в классе обслуживания, который его вводит.
Я не уверен, упускаю ли я что-либо, что может быть глупым, но это отняло у меня много времени, и я все еще на том же месте, где это началось, и не могу добиться какого-либо прогресса.
Любые быстрые указатели должны быть очень полезны.
primaryKeys = {"id"})
@TypeConverters(TmdbTypeConverters.class)
public class Movie {
@SerializedName("id")
@Expose
@NonNull
public final int id;
@SerializedName(value = "poster_path")
public String posterUrl;
public Double rating;
@SerializedName(value = "release_date")
public String releaseYear;
public String title;
public Boolean adult;
public String overview;
@SerializedName(value = "original_title")
public String originalTitle;
@SerializedName(value = "original_language")
public String originalLanguage;
@SerializedName(value = "backdrop_path")
public String backdropPath;
public Double popularity;
@SerializedName(value = "vote_count")
public Integer voteCount;
public Boolean video;
@SerializedName(value = "vote_average")
public Double voteAverage;
@SerializedName(value = "genre_ids")
public List<Integer> genreIds;
@SerializedName(value = "parent")
public Movie parent;
public Movie(int id, String posterUrl, Double rating, String releaseYear, String title, Boolean adult,
String overview, String originalTitle, String originalLanguage, String backdropPath,
Double popularity, Integer voteCount, Boolean video, Double voteAverage, List<Integer> genreIds, Movie parent) {
this.id = id;
this.posterUrl = posterUrl;
this.rating = rating;
this.releaseYear = releaseYear;
this.title = title;
this.adult = adult;
this.overview = overview;
this.originalLanguage = originalLanguage;
this.originalTitle = originalTitle;
this.backdropPath = backdropPath;
this.popularity = popularity;
this.voteCount = voteCount;
this.video = video;
this.voteAverage = voteAverage;
this.genreIds = genreIds;
this.parent = parent;
}
}
public interface TmdbService {
@GET("movie/top_rated?")
LiveData<ApiResponse<MovieResult>> getTopRatedMovies();
@GET("movie/popular?")
LiveData<ApiResponse<MovieResult>> getPopularMovies();
@GET("movie/latest")
LiveData<ApiResponse<MovieResult>> getLatestMovies();
@GET("discover/movie?sort_by=popularity.desc")
LiveData<ApiResponse<MovieResult>> discoverPopularMovies();
@GET("search/movie?")
LiveData<ApiResponse<MovieResult>> searchMovies(@Query("query") String query);
@GET("movie/{movie_id}")
LiveData<ApiResponse<Movie>> getMovieById(@Path("movie_id") int movieId);
@GET("movie/{movie_id}/similar")
LiveData<ApiResponse<Movie>> getSimilarMovies(@Path("movie_id") int movieId);
@GET("genre/movie/list")
LiveData<ApiResponse<GenreResponse>> getGenres();
@GET("movie/{movie_id}/videos")
LiveData<ApiResponse<VideoResult>> getMovieVideos(@Path("movie_id") int movieId);
}