java - 尝试在 .Adapter.ListSourceAdap 的空对象引用上调用虚拟方法 Model.WebSite.getSources()'
问题描述
我不知道我在哪里定义了一个空对象,请帮我找出来!看起来我试图使用来自网站的空对象并将其传递给 ListSourceAdapter 但我不知道为什么以及如何修复它,请帮帮我。
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.example.nutshell.myapplication.Model.WebSite.getSources()' on a null object reference
at com.example.nutshell.myapplication.Adapter.ListSourceAdapter.getItemCount(ListSourceAdapter.java:106)
ListSourceAdapter (我通过 getSource() 的地方)
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 v) {
itemClickListener.onClick(v, getAdapterPosition(),false);
}
}
public class ListSourceAdapter extends RecyclerView.Adapter<ListSourceViewHolder> {
private Context context;
private WebSite webSite;
private IconBetterIdeaService 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(@NonNull final ListSourceViewHolder holder, int position) {
StringBuilder iconBetterAPI=new StringBuilder(" https://icons.better-idea.org/allicons.json?url=");
iconBetterAPI.append(webSite.getSources().get(position).getUrl());
mService.getIconUrl(iconBetterAPI.toString()).enqueue(new Callback<IconBetterIdea>() {
@Override
public void onResponse(Call<IconBetterIdea> call, Response<IconBetterIdea> 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<IconBetterIdea> 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) {
Intent intent=new Intent(context, ListNews.class);
intent.putExtra("source",webSite.getSources().get(position).getId());
}
});
}
@Override
public int getItemCount() {
return webSite.getSources().size();
}
}
和 WebSite.java 是:
public class WebSite {
private String status;
private List<Source> sources;
public WebSite() {
}
public WebSite(String status, List<Source> sources) {
this.status = status;
this.sources = sources;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Source> getSources() {
return sources;
}
public void setSources(List<Source> sources) {
this.sources = sources;
}
}
解决方案
在getItemCount()
方法中,确保webSite
已正确初始化。例如
ListSourceAdapter adapter = new ListSourceAdapter(context, new Website());
推荐阅读
- python - VaderSentiment 在令牌列表而不是句子上
- amazon-web-services - 完成后删除 AWS Glue 爬虫
- reactjs - 如何使用接口传递数组对象或将它们存储在reducer中,过滤器如何处理它?
- r - 当 R 中的 lat 和 lon 为双倍时,从 NetCDF 文件中提取“tos”数据
- html - 如何检测用户是否与表单进行了交互?
- android-studio - 你能用可移动设备编辑项目吗|| 安卓工作室
- python-3.x - 在线培训如何在 Word2vec 模型中使用 Genism
- java - 当我尝试在通过 https 公开的 WSDL 上使用 wsimport 创建文件时出错
- spring-boot - Spring boot 不调用 DisposableBean.destroy() 方法
- python - Python Selenium 无法从 iframe 获取按钮