2016-06-17 1 views
0

최고 등급 영화의 영화 포스터를 보여주는 Android 앱을 개발하고 있습니다. Retrofit 2를 사용하여 이것을 빌드하고 싶습니다. 그러나 '서비스 메소드가 void를 반환 할 수 없습니다.'오류가 계속 발생합니다. 여기에 스택 추적입니다 :개조 2 : 내 GET 요청에 오류가 발생했습니다.

FATAL EXCEPTION: main 
Process: com.hfad.popularmovies, PID: 17921 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hfad.popularmovies/com.hfad.popularmovies.MainActivity}: java.lang.IllegalArgumentException: Service methods cannot return void. 
for method MoviesAPI.getFeedPopular 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.IllegalArgumentException: Service methods cannot return void. 

내가 & GET 요청 여기 =>

public interface MoviesAPI { 
    @GET("/movie/top_rated?api_key=XXXXXXX") 
    void getFeedTopRated(Callback <List<Movie>> response); 

    @GET("/movie/popular?api_key=XXXXXXX") 
    void getFeedPopular(Callback<List<Movie>> response); 
} 

를 포함하는 필요한 인터페이스를 필요로하는 필드를 포함하는 POJO를 만들었다는 RecyclerView을 통해 포스터를 표시해야 조각이다 :

public class TopRatedFragment extends Fragment { 
    private static final String ENDPOINT = "http://api.themoviedb.org/3/"; 
    private PosterAdapter adapter; 
    private List<Movie> movieList; 

    public TopRatedFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     RecyclerView recyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_top_rated, container, false); 
     adapter = new PosterAdapter(getActivity()); 
     recyclerView.setAdapter(adapter); 
     GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2); 
     recyclerView.setLayoutManager(layoutManager); 
     getTopRatedMovies(); 

     return recyclerView; 
    } 

    private void getTopRatedMovies() { 
     Retrofit retrofit = new Retrofit.Builder() 
          .baseUrl(ENDPOINT) 
          .build(); 
     MoviesAPI api = retrofit.create(MoviesAPI.class); 
     api.getFeedTopRated(new Callback<List<Movie>>() { 
     @Override 
     public void onResponse(Call<List<Movie>> call, Response<List<Movie>> response) { 
      movieList = response.body(); 
      for (Movie movie : movieList) { 
       movie.getPoster_path(); //I get the same error when I use 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Movie>> call, Throwable t) { 
     } 
    }); 
    } 
} 

더 많은 코드 또는 배경 정보를 제공해야하는지 알려주세요. 다음과 같은

+0

* 서비스 방법으로 무효를 반환 할 수 없습니다. 메서드에 대한 MoviesAPI.getFeedPopular *? – Rohit5k2

+0

이전 응용 프로그램에서 내 서비스 메소드가 void를 반환하고 모든 것이 완벽하게 작동했기 때문입니다. 나는이 오류를 이해하지만, 왜 내가 지금이 시간이 아니라 전에 시간을 얻었는지에 대해 이해하지 못한다. – Helenesh

답변

1

사용자 인터페이스 방법은 예를

@GET("/movie/top_rated?api_key=XXXXXXX") 
Call<List<Movie>> getFeedTopRated(); 

를 들어 당신이 함수를 작성하는 데 필요한 방법의 유형

Call<Expected Result Object> 

에서 개체를 반환해야 :

api.getFeedTopRated().enque(new Callback<List<Movie>>() { /* */ }); 
관련 문제