Android getitemcount()在带有电影api的recyclerview中返回null
Android getitemcount()在带有电影api的recyclerview中返回null,android,android-recyclerview,Android,Android Recyclerview,getitemcount()在RecyclerView适配器中返回null。当我运行我的应用程序时,它会崩溃,错误消息是getitemcount()中的项目大小返回null 以下是相关代码: 公共类MoviesAdapter扩展了RecyclerView.Adapter { 私人语境; 私人名单电影演员; 公共MoviesAdapter(上下文,列表movieList){ this.context=上下文; this.movieList=movieList; } @凌驾 公共MyViewHold
getitemcount()
在RecyclerView
适配器中返回null
。当我运行我的应用程序时,它会崩溃,错误消息是getitemcount()
中的项目大小返回null
以下是相关代码:
公共类MoviesAdapter扩展了RecyclerView.Adapter
{
私人语境;
私人名单电影演员;
公共MoviesAdapter(上下文,列表movieList){
this.context=上下文;
this.movieList=movieList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View-View=LayoutInflater.from(parent.getContext()).flate(R.layout.movie_-card,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
holder.title.setText(movieList.get(position.getOriginal_title());
字符串投票=Double.toString(movieList.get(position.getVoteAverage());
holder.userrating.setText(投票);
Glide.with(context).load(movieList.get(position.getPosterpath()).placeholder(R.drawable.load).into(holder.imageView);
}
@凌驾
public int getItemCount(){
返回movieList.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder
{
私有文本视图标题,用户等级;
私人影像视图;
公共MyViewHolder(最终视图项视图){
超级(项目视图);
title=(TextView)itemView.findViewById(R.id.movietitle);
userrating=(TextView)itemView.findViewById(R.id.userrating);
imageView=(imageView)itemView.findViewById(R.id.缩略图);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
int pos=getAdapterPosition();
如果(位置!=RecyclerView.无位置)
{
电影点击数据项=movieList.get(pos);
意向意向=新意向(上下文,DetailActivity.class);
intent.putExtra(“原始标题”,movieList.get(pos.getOriginal_title());
intent.putExtra(“poster”,movieList.get(pos.getPosterpath());
intent.putExtra(“概述”,movieList.get(pos.getOverview());
intent.putExtra(“vot_average”,movieList.get(pos.getVote_count());
intent.putExtra(“release_date”,movieList.get(pos.getRelease_data());
intent.addFlags(intent.FLAG\u活动\u新任务);
背景。开始触觉(意图);
Toast.makeText(view.getContext(),“您单击了”+clickedDataItem.getOriginal_title(),Toast.LENGTH_LONG.show();
}
}
});
}
}
}
公共接口服务{
@获取(“/3/电影/流行”)
调用getPopularMovies(@Query(“api_key”)字符串apikey);
}
公共类电影回应{
私人网页;
私有列表结果;
私人结果;
私人网页;
公共int getPage(){
返回页面;
}
公共无效设置页(整版页){
this.page=page;
}
公共列表getResult(){
返回结果;
}
公共void setResult(列表结果){
this.result=结果;
}
public int getTotalresult(){
返回结果;
}
公共无效setTotalresult(整数totalresult){
this.totalresult=totalresult;
}
公共int getTotalpage(){
返回总页面;
}
公共无效setTotalpage(整型totalpage){
this.totalpage=totalpage;
}
}
公映{
私有字符串posterpath;
私人布尔成人;
私有字符串概述;
私有字符串释放数据;
私有列表类型_id=new ArrayList();
私有int-id;
私有字符串原始标题;
私有字符串源语言;
私有字符串标题;
私有字符串回传路径;
私人双重流行;
私人投票计数;
私有布尔视频;
私人双平均;
公共电影(字符串posterpath、布尔成人、字符串概述、字符串发布数据、列表类型id、int id、字符串原始标题、字符串原始语言、字符串标题、字符串backdroppath、双人气、int投票计数、布尔视频、双voteAverage){
this.posterpath=posterpath;
这个。成人=成人;
this.overview=概述;
this.release_data=release_data;
this.genre\u id=genre\u id;
this.id=id;
this.original_title=original_title;
this.original_language=original_language;
this.title=标题;
this.backdroppath=backdroppath;
受欢迎程度=受欢迎程度;
this.vote\u count=vote\u count;
这个视频=视频;
this.voteAverage=voteAverage;
}
字符串baseImageUrl=”https://image.tmdb.org/t/p/w500";
公共字符串getPosterpath(){
返回“https://image.tmdb.org/t/p/w500“+后路径;
}
公共void setPosterpath(字符串posterpath){
this.posterpath=posterpath;
}
公共布尔值isAdult(){
返回成人;
}
公共无效设置成人(布尔成人){
这个。成人=成人;
}
公共字符串getOverview(){
退货概述;
}
公共void集合概述(字符串概述){
this.overview=概述;
}
公共字符串getRelease_data(){
返回发布数据;
}
公共void setRelease_数据(字符串release_数据){
this.release_data=release_data;
}
公共列表getgreen_id(){
返回用户ID;
}
公共无效设置类型标识(列出类型标识){
this.genre\u id=genre\u id;
}
公共int getId(){
返回id;
}
公共无效设置ID(i)
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder>
{
private Context context;
private List<Movie> movieList;
public MoviesAdapter(Context context, List<Movie> movieList) {
this.context = context;
this.movieList = movieList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_card,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.title.setText(movieList.get(position).getOriginal_title());
String vote = Double.toString(movieList.get(position).getVoteAverage());
holder.userrating.setText(vote);
Glide.with(context).load(movieList.get(position).getPosterpath()).placeholder(R.drawable.loading).into(holder.imageView);
}
@Override
public int getItemCount() {
return movieList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
private TextView title,userrating;
private ImageView imageView;
public MyViewHolder(final View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.movietitle);
userrating = (TextView) itemView.findViewById(R.id.userrating);
imageView = (ImageView) itemView.findViewById(R.id.thumbnail);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION)
{
Movie clickedDataItem = movieList.get(pos);
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("original_title" , movieList.get(pos).getOriginal_title());
intent.putExtra("poster",movieList.get(pos).getPosterpath());
intent.putExtra("overview",movieList.get(pos).getOverview());
intent.putExtra("vot_average",movieList.get(pos).getVote_count());
intent.putExtra("release_date",movieList.get(pos).getRelease_data());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Toast.makeText(view.getContext(),"you clicked "+clickedDataItem.getOriginal_title(),Toast.LENGTH_LONG).show();
}
}
});
}
}
}
public interface Service {
@GET("/3/movie/popular")
Call<MoviesResponse> getPopularMovies (@Query("api_key") String apikey);
}
public class MoviesResponse {
private int page;
private List <Movie> result;
private int totalresult;
private int totalpage;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public List<Movie> getResult() {
return result;
}
public void setResult(List<Movie> result) {
this.result = result;
}
public int getTotalresult() {
return totalresult;
}
public void setTotalresult(int totalresult) {
this.totalresult = totalresult;
}
public int getTotalpage() {
return totalpage;
}
public void setTotalpage(int totalpage) {
this.totalpage = totalpage;
}
}
public class Movie {
private String posterpath;
private boolean adult;
private String overview;
private String release_data;
private List<Integer> genre_ids = new ArrayList<Integer>();
private int id;
private String original_title;
private String original_language;
private String title;
private String backdroppath;
private Double popularity;
private int vote_count;
private boolean video;
private Double voteAverage;
public Movie(String posterpath, boolean adult, String overview, String release_data, List<Integer> genre_ids, int id, String original_title, String original_language, String title, String backdroppath, Double popularity, int vote_count, boolean video, Double voteAverage) {
this.posterpath = posterpath;
this.adult = adult;
this.overview = overview;
this.release_data = release_data;
this.genre_ids = genre_ids;
this.id = id;
this.original_title = original_title;
this.original_language = original_language;
this.title = title;
this.backdroppath = backdroppath;
this.popularity = popularity;
this.vote_count = vote_count;
this.video = video;
this.voteAverage = voteAverage;
}
String baseImageUrl = "https://image.tmdb.org/t/p/w500";
public String getPosterpath() {
return "https://image.tmdb.org/t/p/w500" + posterpath;
}
public void setPosterpath(String posterpath) {
this.posterpath = posterpath;
}
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 getRelease_data() {
return release_data;
}
public void setRelease_data(String release_data) {
this.release_data = release_data;
}
public List<Integer> getGenre_ids() {
return genre_ids;
}
public void setGenre_ids(List<Integer> genre_ids) {
this.genre_ids = genre_ids;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOriginal_title() {
return original_title;
}
public void setOriginal_title(String original_title) {
this.original_title = original_title;
}
public String getOriginal_language() {
return original_language;
}
public void setOriginal_language(String original_language) {
this.original_language = original_language;
}
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 getPopularity() {
return popularity;
}
public void setPopularity(Double popularity) {
this.popularity = popularity;
}
public int getVote_count() {
return vote_count;
}
public void setVote_count(int vote_count) {
this.vote_count = vote_count;
}
public boolean isVideo() {
return video;
}
public void setVideo(boolean video) {
this.video = video;
}
public Double getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(Double voteAverage) {
this.voteAverage = voteAverage;
}
public String getBaseImageUrl() {
return baseImageUrl;
}
public void setBaseImageUrl(String baseImageUrl) {
this.baseImageUrl = baseImageUrl;
}
}
public class Client {
public static final String BASE_URL = "https://api.themoviedb.org";
public static final String API_KEY = "5c723cbb6a71ce839dc704a80febe3fb";
public static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
}
return retrofit;
}
}
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private MoviesAdapter adapter;
private List<Movie> movieList;
ProgressDialog pd;
private TextView textView;
private SwipeRefreshLayout swipecontainer;
public static final String LOG_TAG = MoviesAdapter.class.getName();
@SuppressLint("ResourceAsColor")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
swipecontainer = (SwipeRefreshLayout) findViewById(R.id.main_content);
swipecontainer.setColorSchemeColors(android.R.color.holo_orange_dark);
swipecontainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
initview();
Toast.makeText(MainActivity.this,"Movies Refreshed",Toast.LENGTH_LONG).show();
}
});
}
public Activity getActivity ()
{
Context context =this;
while (context instanceof ContextWrapper)
{
return (Activity) context;
}
context =((ContextWrapper) context).getBaseContext();
return null;
}
private void initview() {
pd = new ProgressDialog(this);
pd.setMessage("Fetching Movies");
pd.setCancelable(false);
pd.show();
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
movieList = new ArrayList<>();
adapter = new MoviesAdapter(this,movieList);
if(getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
recyclerView.setLayoutManager(new GridLayoutManager(this,2));
}
else
{
recyclerView.setLayoutManager(new GridLayoutManager(this,4) );
}
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
loadjson();
}
private void loadjson() {
try {
if(BuildConfig.THE_MOVIE_DB_API_TOKEN.isEmpty())
{
Toast.makeText(getApplicationContext(),"please obtain API key",Toast.LENGTH_LONG).show();
return;
}
Client client= new Client();
Service apiservice = Client.getClient().create(Service.class);
Call<MoviesResponse> call = apiservice.getPopularMovies("5c723cbb6a71ce839dc704a80febe3fb");
call.enqueue(new Callback<MoviesResponse>() {
@Override
public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) {
List<Movie> movies = response.body().getResult();
recyclerView.setAdapter(new MoviesAdapter(getApplicationContext(),response.body().getResult()));
recyclerView.smoothScrollToPosition(0);
if (swipecontainer.isRefreshing()) {
swipecontainer.setRefreshing(false);
}
pd.dismiss();
}
@Override
public void onFailure(retrofit2.Call<MoviesResponse> call, Throwable t) {
Log.d("Error" ,t.getMessage());
Toast.makeText(MainActivity.this,"Error Fetching Data! " ,Toast.LENGTH_LONG).show();
}
});
}
catch (Exception e)
{
Log.d("Error" ,e.getMessage());
Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.menu_setting :
return true;
default:return super.onOptionsItemSelected(item);
}
}
}