2016-11-03 6 views
-1

i erstellen api Anwendung Aufruf die Bewegungen DB mit Retrofit-Bibliothek und recyclerViewe , wenn der Benutzer den Film zeigen Aktivität für Filme Detail wählen i Jetzt recyclerView mit ritrofit implementieren die beliebten Filmdaten erstellen holen, dieses MoviesApiService Klasse:mehrere Anfrage mit Retrofit in android

public interface MoviesApiService { 
    @GET("/movie/popular") 
    void getPopularMovies(Callback<Movie.MovieResult> cb); } 

dieser Modellklasse:

package com.walkatheri.popularmovies; 

import android.os.Parcel; 
import android.os.Parcelable; 

import com.google.gson.annotations.SerializedName; 

import java.util.List; 

/** 

*/ 
public class Movie implements Parcelable{ 
    private String title; 
    @SerializedName("poster_path") 
    private String poster; 
    @SerializedName("overview") 
    private String description; 
    @SerializedName("backdrop_path") 
    private String backdrop; 

    public Movie() {} 

    protected Movie(Parcel in) { 
     title = in.readString(); 
     poster = in.readString(); 
     description = in.readString(); 
     backdrop = in.readString(); 
    } 

    public static final Creator<Movie> CREATOR = new Creator<Movie>() { 
     @Override 
     public Movie createFromParcel(Parcel in) { 
      return new Movie(in); 
     } 

     @Override 
     public Movie[] newArray(int size) { 
      return new Movie[size]; 
     } 
    }; 

    public String getTitle() { 
     return title; 
    } 

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

    public String getPoster() { 
     return "http://image.tmdb.org/t/p/w500" + poster; 
    } 

    public void setPoster(String poster) { 
     this.poster = poster; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getBackdrop() { 
     return "http://image.tmdb.org/t/p/w500" + backdrop; 
    } 

    public void setBackdrop(String backdrop) { 
     this.backdrop = backdrop; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(title); 
     parcel.writeString(poster); 
     parcel.writeString(description); 
     parcel.writeString(backdrop); 
    } 

    public static class MovieResult { 
     private List<Movie> results; 

     public List<Movie> getResults() { 
      return results; 
     } 
    } 
} 

Klasse Detail Film: public class MovieDetai lActivity erweitert AppCompatActivity { public static final Zeichenfolge EXTRA = "movie";

private Movie mMovie; 
    ImageView backdrop; 
    ImageView poster; 
    TextView title; 
    TextView description; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_movie_detail); 
     if (getIntent().hasExtra(EXTRA)) { 
      mMovie = getIntent().getParcelableExtra(EXTRA); 
     } else { 
      throw new IllegalArgumentException("Detail activity must receive a movie parcelable"); 
     } 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     CollapsingToolbarLayout toolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout); 
     toolbarLayout.setTitle(mMovie.getTitle()); 

     backdrop = (ImageView) findViewById(R.id.backdrop); 
     title = (TextView) findViewById(R.id.movie_title); 
     description = (TextView) findViewById(R.id.movie_description); 
     poster = (ImageView) findViewById(R.id.movie_poster); 

     title.setText(mMovie.getTitle()); 
     description.setText(mMovie.getDescription()); 
     Picasso.with(this) 
       .load(mMovie.getPoster()) 
       .into(poster); 
     Picasso.with(this) 
       .load(mMovie.getBackdrop()) 
       .into(backdrop); 
    } 
} 

diese mainActivity Klasse:

public class MainActivity extends AppCompatActivity { 
    private RecyclerView mRecyclerView; 
    private MoviesAdapter mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
     mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); 
     mAdapter = new MoviesAdapter(this); 
     mRecyclerView.setAdapter(mAdapter); 
     getPopularMovies(); 
    } 

    private void getPopularMovies() { 
     RestAdapter restAdapter = new RestAdapter.Builder() 
       .setEndpoint("http://api.themoviedb.org/3") 
       .setRequestInterceptor(new RequestInterceptor() { 
        @Override 
        public void intercept(RequestFacade request) { 
         request.addEncodedQueryParam("api_key", "Key_API"); 
        } 
       }) 
       .setLogLevel(RestAdapter.LogLevel.FULL) 
       .build(); 
     MoviesApiService service = restAdapter.create(MoviesApiService.class); 
     service.getPopularMovies(new Callback<Movie.MovieResult>() { 
      @Override 
      public void success(Movie.MovieResult movieResult, Response response) { 
       mAdapter.setMovieList(movieResult.getResults()); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       error.printStackTrace(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

       if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
    public static class MovieViewHolder extends RecyclerView.ViewHolder { 
     public ImageView imageView; 
     public MovieViewHolder(View itemView) { 
      super(itemView); 
      imageView = (ImageView) itemView.findViewById(R.id.imageView); 
     } 
    } 
    public static class MoviesAdapter extends RecyclerView.Adapter<MovieViewHolder> { 
     private List<Movie> mMovieList; 
     private LayoutInflater mInflater; 
     private Context mContext; 

     public MoviesAdapter(Context context) { 
      this.mContext = context; 
      this.mInflater = LayoutInflater.from(context); 
     } 

     @Override 
     public MovieViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) { 
      View view = mInflater.inflate(R.layout.row_movie, parent, false); 
      final MovieViewHolder viewHolder = new MovieViewHolder(view); 
      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        int position = viewHolder.getAdapterPosition(); 
        Intent intent = new Intent(mContext, MovieDetailActivity.class); 
        intent.putExtra(MovieDetailActivity.EXTRA, mMovieList.get(position)); 
        mContext.startActivity(intent); 
       } 
      }); 
      return viewHolder; 
     } 

     @Override 
     public void onBindViewHolder(MovieViewHolder holder, int position) { 
      Movie movie = mMovieList.get(position); 
      Picasso.with(mContext) 
        .load(movie.getPoster()) 
        .placeholder(R.color.colorAccent) 
        .into(holder.imageView); 
     } 

     @Override 
     public int getItemCount() { 
      return (mMovieList == null) ? 0 : mMovieList.size(); 
     } 

     public void setMovieList(List<Movie> movieList) { 
      this.mMovieList = new ArrayList<>(); 
      this.mMovieList.addAll(movieList); 
      notifyDataSetChanged(); 
     } 
    } 
} 

jetzt, wie kann in der Lage sein, sowohl populäre Filmdaten zu holen und hoch bewertete Filmdaten von https://developers.themoviedb.org? kannst du mir helfen ?

Antwort

0

Sie haben eine Methode in Ihrer MainActivity genannt getPopularMovies() wo Sie service.getPopularMovies() nennen, die die MoviesApiService@GET("/movie/popular") verwendet.

@GET("/movie/high_rated") void getHighRatedMovies(Callback<Movie.MovieResult> cb);

Erstellen Sie dann eine ähnliche getHighRatedMovies() Methode und je nachdem, was der Benutzer auswählt, um diese Methode einen Anruf tätigen: Sie könnten eine ähnliche API für High-rated Filme, so etwas wie erstellen. Der einzige Unterschied wäre, dass Sie service.getHighRatedMovies statt service.getPopularMovies() anrufen würden.

Um den Code auf nur eine Methode zu vereinfachen, können Sie eine Methode mit dem Namen getMovies() erstellen und dann an dem Punkt, an dem Sie service.(something) initialisieren, den richtigen Methodenaufruf festlegen.

Verwandte Themen