2016-06-17 20 views
0

最高の評価を受けた映画の映画ポスターを表示するAndroidアプリを開発しています。私はRetrofit 2を使用してこれを構築したいと思います。しかし、「サービスメソッドはvoidを返すことはできません」というエラーが発生し続けます。ここでは、スタックトレースです:Retrofit 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

*サービスメソッドはvoidを返すことはできません。メソッドMoviesAPI.getFeedPopular *の場合は ? – Rohit5k2

+0

私の以前のアプリでは、私のサービスメソッドがvoidを返し、すべてが完全に機能していたからです。私はこのエラーを理解していますが、なぜ私は今の時ではなく、前の時ではないのですか。 – Helenesh

答えて

1

あなたのインターフェイスメソッドがタイプ

例えば
Call<Expected Result Object> 

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

そして、あなたは、次のように関数を記述する必要がある方法でのオブジェクトを返す必要があります:

api.getFeedTopRated().enque(new Callback<List<Movie>>() { /* */ }); 
関連する問題