0
最近、retrofit2でjsonの解析について少し勉強しました。私は自分で実装しようとしましたが、出力は表示されず、ログcatにもエラーはありません。何が間違っていますか?以下の私のコードを見てみましょう:AndroidのJSONをRecyclerViewで解析する
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RestClient restClient;
private List<Movies> moviesList = new ArrayList<>();
private MoviesAdapter adapter;
private final String TAG = MainActivity.class.getCanonicalName();
private RelativeLayout relativeLayout;
private static final String API_KEY = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
relativeLayout = (RelativeLayout) findViewById(R.id.activity_main);
if (API_KEY.isEmpty()){
Snackbar.make(relativeLayout, "Access Requires an API Key", Snackbar.LENGTH_LONG);
}
recyclerView = (RecyclerView) findViewById(R.id.rView);
recyclerView.setHasFixedSize(true);
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MoviesAdapter(MainActivity.this, moviesList, R.layout.movie_items_layout);
recyclerView.setAdapter(adapter);
restClient = new RestClient();
RestEndpoint restService = restClient.getMoviesClient().create(RestEndpoint.class);
Call<MoviesResponse> moviesResponseCall = restService.getTopRatedMovies(API_KEY);
moviesResponseCall.enqueue(new Callback<MoviesResponse>() {
@Override
public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) {
moviesList.clear();
moviesList.addAll(response.body().getMoviesResult());
List<Movies> list = response.body().getMoviesResult();
for (Movies movies : list){
Movies movies1 = new Movies(movies.isAdult(), movies.getOverview(), movies.getReleaseDate(),
movies.getTitle(), movies.getBackdropPath(), movies.getVoteAverage());
}
adapter.notifyDataSetChanged();
//moviesList = response.body().getMoviesResult();
Log.v(TAG, "Number of Movies Received:" + moviesList.size());
}
@Override
public void onFailure(Call<MoviesResponse> call, Throwable t) {
}
});
}
}
作品データモデルクラスを以下に示します。
public class Movies {
@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;
@SerializedName("id")
private int 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 String voteCount;
@SerializedName("video")
private boolean video;
@SerializedName("vote_average")
private double voteAverage;
public Movies(boolean adult, String overview, String releaseDate, String title, String backdropPath, double voteAverage) {
this.adult = adult;
this.overview = overview;
this.releaseDate = releaseDate;
this.title = title;
this.backdropPath = backdropPath;
this.voteAverage = voteAverage;
}
public Movies() {
}
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 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 getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(double voteAverage) {
this.voteAverage = voteAverage;
}
}
また、私recyclerviewアダプタクラスを見てみましょう:
public class MoviesAdapter extends RecyclerView.Adapter<MoviesHolder> {
private Context context;
private List<Movies> moviesList;
private int rowLayout;
public MoviesAdapter(Context context, List<Movies> moviesList, int rowLayout) {
this.context = context;
this.moviesList = moviesList;
this.rowLayout = rowLayout;
}
@Override
public MoviesHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new MoviesHolder(mView);
}
@Override
public void onBindViewHolder(MoviesHolder holder, int position) {
Movies movies = moviesList.get(position);
holder.title.setText(movies.getTitle());
holder.date.setText(movies.getReleaseDate());
holder.desription.setText(movies.getOverview());
holder.rating.setText(String.valueOf(movies.getVoteAverage()));
Picasso.with(context)
.load(movies.getBackdropPath())
.into(holder.backdrop);
}
@Override
public int getItemCount() {
moviesList = new ArrayList<>();
return moviesList.size();
}
}
jsonデータは、apovキーを使用してthemoviedbウェブサイトから取得されました。何が間違っているかを親切に指摘する。
無関係を削除してみてください何elememntsがないと思って、サイズが0である新しいリストを作成されますが、
に誤りがありますリスト list = response.body()。getMoviesResult() 'とその後のループ –
ありがとう、ありがとう。私のlogcatでは、応答が来ているのが分かるが、受信した応答を内部でどのように表示するかリサイclerview。 – Nzadibe
この質問に情報を追加する必要があります。レスポンスボディからリストのサイズを確認しましたか?データが返されている場合は、アダプタがデータをデータセットに受け取っていることを確認してください。 – Orbit