如何为 webSite.getSources().size(); 修复此 NullPointerException?

How do I fix this NullPointerException for webSite.getSources().size();

我不知道如何解决这个 NullPointerException 错误 这个项目: (看到类似的问题,但没有帮助)

MainActivity.java

    public class MainActivity extends AppCompatActivity {

    RecyclerView listWebsite;
    RecyclerView.LayoutManager layoutManager;
    NewsService mService;
    ListSourceAdapter adapter;
    SpotsDialog dialog;
    SwipeRefreshLayout swipeLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Init cache
        Paper.init(this);

        //Init Service
        mService = Common.getNewsService();

        //Init View
        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
        swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadWebsiteSource(true);
            }
        });

        listWebsite = (RecyclerView) findViewById(R.id.list_source);
        listWebsite.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        listWebsite .setLayoutManager(layoutManager);

        dialog = new SpotsDialog(this);

        loadWebsiteSource(false);

    }

    private void loadWebsiteSource(boolean isRefreshed) {
        if(!isRefreshed)
        {
            String cache = Paper.book().read("cache");
            if(cache != null && !cache.isEmpty())
            {
                WebSite webSite = new Gson().fromJson(cache,WebSite.class);  //Convert cache from Json to Object
                adapter = new ListSourceAdapter(getBaseContext(),webSite);
                adapter.notifyDataSetChanged();
                listWebsite.setAdapter(adapter);
            }
            else
            {
                dialog.show();
                //Fetch new data
                mService.getSources().enqueue(new Callback<WebSite>() {
                    @Override
                    public void onResponse(Call<WebSite> call, Response<WebSite> response) {
                        adapter = new ListSourceAdapter(getBaseContext(),response.body());
                        adapter.notifyDataSetChanged();
                        listWebsite.setAdapter(adapter);

                        //Save to cache
                        Paper.book().write("cache", new Gson().toJson(response.body()));
                    }

                    @Override
                    public void onFailure(Call<WebSite> call, Throwable t) {

                    }
                });
            }
        }
        else   //If from Swipe to Refresh
        {
            dialog.show();
            //Fetch new data
            mService.getSources().enqueue(new Callback<WebSite>() {
                @Override
                public void onResponse(Call<WebSite> call, Response<WebSite> response) {
                    adapter = new ListSourceAdapter(getBaseContext(),response.body());
                    adapter.notifyDataSetChanged();
                    listWebsite.setAdapter(adapter);

                    //Save to cache
                    Paper.book().write("cache", new Gson().toJson(response.body()));

                    //Dismiss refresh progressing
                    swipeLayout.setRefreshing(false);
                }

                @Override
                public void onFailure(Call<WebSite> call, Throwable t) {

                }
            });

        }
    }

}

ListSourceAdapter.java

    class ListSourceViewHolder extends RecyclerView.ViewHolder
    implements View.OnClickListener
{
    ItemClickListener itemClickListener;

    TextView source_title;
    CircleImageView source_image;

    public ListSourceViewHolder(View itemView) {
        super(itemView);

        source_image = (CircleImageView) itemView.findViewById(R.id.source_image);
        source_title = (TextView) itemView.findViewById(R.id.source_name);
    }

    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    @Override
    public void onClick(View view) {
        itemClickListener.onClick(view,getAdapterPosition(),false);
    }
}

    public class ListSourceAdapter extends RecyclerView.Adapter<ListSourceViewHolder> {
        private Context context;
        private WebSite webSite;

        private FaviconGrabberService mService;

        public ListSourceAdapter(Context context, WebSite webSite) {
            this.context = context;
            this.webSite = webSite;

            mService = Common.getIconService();
        }

        @NonNull
        @Override
        public ListSourceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            View itemView = inflater.inflate(R.layout.source_layout, parent, false);
            return new ListSourceViewHolder(itemView);
        }

        @Override
        public void onBindViewHolder(final ListSourceViewHolder holder, int position) {

            StringBuilder faviconAPI = new StringBuilder("https://favicongrabber.com/");
            faviconAPI.append(webSite.getSources().get(position).getUrl());

            mService.getIconUrl(faviconAPI.toString())
                    .enqueue(new Callback<FaviconGrabber>() {
                        @Override
                        public void onResponse(Call<FaviconGrabber> call, Response<FaviconGrabber> response) {
                            if(response.body().getIcons().size() > 0)
                            {
                                Picasso.with(context)
                                        .load(response.body().getIcons().get(0).getUrl())
                                        .into(holder.source_image);

                            }
                        }

                        @Override
                        public void onFailure(Call<FaviconGrabber> call, Throwable t) {

                        }
                    });

            holder.source_title.setText(webSite.getSources().get(position).getName());

            holder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                     //Implement part 2

                }
            });
        }

        @Override
        public int getItemCount() {
                return webSite.getSources().size();        //here I get a NullPointerException
        }

    }

我收到此错误消息 return webSite.getSources().size(); :

java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'java.util.List ...Model.WebSite.getSources()' 在...Adapter.ListSourceAdapter.getItemCount(ListSourceAdapter.java:110)

如果你需要,我可以提供项目的其他部分,tnx!

错误告诉您对象引用 webSite 为空。您需要检查调用 ListSourceAdapter 构造函数的进程,看看是什么导致它向构造函数调用发送 null。