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);
        }
    }
}