Java 当我的应用程序第一次加载时,清除RecyclerView中的空指针异常

Java 当我的应用程序第一次加载时,清除RecyclerView中的空指针异常,java,android,nullpointerexception,android-recyclerview,Java,Android,Nullpointerexception,Android Recyclerview,我正在使用RecyclerView来显示来自各种RSS站点的RSS提要。当应用程序加载且设备脱机时,应用程序崩溃并出现以下错误 at com.nepalpolice.sample.alarm.data.Adapter.FeedAdapter.getItemCount(FeedAdapter.java:104) 但若应用程序在线,那个么应用程序将平稳加载,下次设备离线时,应用程序也会工作。 但只有当应用程序第一次加载并且设备离线时,只有应用程序崩溃……当我点击log error(日志错误)

我正在使用
RecyclerView
来显示来自各种
RSS
站点的
RSS
提要。当应用程序加载且设备脱机时,应用程序崩溃并出现以下错误

 at com.nepalpolice.sample.alarm.data.Adapter.FeedAdapter.getItemCount(FeedAdapter.java:104)  
但若应用程序在线,那个么应用程序将平稳加载,下次设备离线时,应用程序也会工作。 但只有当应用程序第一次加载并且设备离线时,只有应用程序崩溃……当我点击log error(日志错误)时……它会将我指向下面的行

   @Override
public int getItemCount() {
    return rssObject.items.size();
}
}
这是整个类的代码

class FeedViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener
{

    public TextView txtTitle,txtPubDate,txtContent;
    private ItemClickListener itemClickListener;




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

        txtTitle = (TextView)itemView.findViewById(R.id.txtTitle);
        txtPubDate = (TextView)itemView.findViewById(R.id.txtPubDate);
        txtContent = (TextView)itemView.findViewById(R.id.txtContent);

        //Set Event
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

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

    @Override
    public void onClick(View v) {

        itemClickListener.onClick(v,getAdapterPosition(),false);

    }

    @Override
    public boolean onLongClick(View v) {
        itemClickListener.onClick(v,getAdapterPosition(),true);
        return true;
    }
}

public class FeedAdapter extends RecyclerView.Adapter<FeedViewHolder> {

    private RSSObject rssObject;
    private Context mContext;
    private LayoutInflater inflater;

    public FeedAdapter(RSSObject rssObject, Context mContext) {
        this.rssObject = rssObject;
        this.mContext = mContext;
        inflater = LayoutInflater.from(mContext);
    }

    @Override
    public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View itemView = inflater.inflate(R.layout.row,parent,false);
        return new FeedViewHolder(itemView);
    }

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

        holder.txtTitle.setText(rssObject.getItems().get(position).getTitle());
        holder.txtPubDate.setText(rssObject.getItems().get(position).getPubDate());
        holder.txtContent.setText(rssObject.getItems().get(position).getContent());

        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                if(!isLongClick)
                {





                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(rssObject.getItems().get(position).getLink()));
                    browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    mContext.startActivity(browserIntent);
                }
            }
        });

    }

    @Override
    public int getItemCount() {
        return rssObject.items.size();
    }
}
类FeedViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener、View.OnLongClickListener
{
公共文本视图txtTitle、txtPubDate、txtContent;
私有项ClickListener项ClickListener;
公共FeedViewHolder(查看项目视图){
超级(项目视图);
txtTitle=(TextView)itemView.findViewById(R.id.txtTitle);
txtPubDate=(TextView)itemView.findViewById(R.id.txtPubDate);
txtContent=(TextView)itemView.findViewById(R.id.txtContent);
//设置事件
setOnClickListener(这个);
setOnLongClickListener(此);
}
public void setItemClickListener(ItemClickListener ItemClickListener){
this.itemClickListener=itemClickListener;
}
@凌驾
公共void onClick(视图v){
onClick(v,getAdapterPosition(),false);
}
@凌驾
仅长按公共布尔值(视图v){
onClick(v,getAdapterPosition(),true);
返回true;
}
}
公共类FeedAdapter扩展了RecyclerView.Adapter{
私有RSSObject RSSObject;
私有上下文;
私人充气机;
公共FeedAdapter(RSSObject RSSObject,Context mContext){
this.rssObject=rssObject;
this.mContext=mContext;
充气器=从(mContext)开始的充气器;
}
@凌驾
public FeedViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图项视图=充气机充气(R.layout.row,父项,false);
返回新的FeedViewHolder(itemView);
}
@凌驾
BindViewHolder上的公共无效(FeedViewHolder,内部位置){
holder.txtTitle.setText(rssObject.getItems().get(position.getTitle());
holder.txtPubDate.setText(rssObject.getItems().get(position.getPubDate());
holder.txtContent.setText(rssObject.getItems().get(position.getContent());
setItemClickListener(新的ItemClickListener(){
@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
如果(!isLongClick)
{
Intent-browserIntent=newintent(Intent.ACTION_视图,Uri.parse(rssObject.getItems().get(position.getLink()));
browserIntent.addFlags(意图、标志、活动、新任务);
mContext.startActivity(浏览器内容);
}
}
});
}
@凌驾
public int getItemCount(){
返回rssObject.items.size();
}
}
下面是主要的片段代码

公共类电影扩展片段{
回收视图回收视图;
RSSObject RSSObject;
私有最终字符串RSS_link=”http://www.bollywoodhungama.com/rss/movie-release-date.xml";
私有最终字符串RSS_to_Json_API=”https://api.rss2json.com/v1/api.json?rss_url=";
公共电影(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.activity\u mainrss,容器,false);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getActivity().getBaseContext(),LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(linearLayoutManager);
loadRSS();
返回视图;
}
私有void loadRSS(){
AsyncTask loadRSSAsync=new AsyncTask(){
ProgressDialog mDialog=新建ProgressDialog(getActivity());
@凌驾
受保护的void onPreExecute(){
设置消息(“请稍候…”);
mDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串结果;
HTTPDataHandler http=新的HTTPDataHandler();
结果=http.GetHTTPData(参数[0]);
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串s){
mDialog.discouse();
rssObject=new Gson().fromJson(s,rssObject.class);
FeedAdapter=新的FeedAdapter(rssObject,getActivity().getBaseContext());
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
};
StringBuilder url\u get\u data=新的StringBuilder(RSS\u to\u Json\u API);
url\u get\u data.append(RSS\u链接);
loadRSSAsync.execute(url_get_data.toString());
}
}

有谁能帮助我这个错误是怎么回事以及如何解决这个问题吗?

似乎您正在创建一个
RSSObject
的对象,但是它里面的列表将被初始化为
null
,以避免这种使用

@Override
public int getItemCount() {
    return (rssObject!=null && rssObject.items!=null)? rssObject.items.size():0;
// if object and list is not null then return size otherwise return 0
}

要显示rssObject是否为null,请执行以下操作:

@Override
public int getItemCount() {
    if (rssObject == null) {
         Toast.makeText(context, "rssObject is NUll", Toast.LENGTH_SHORT).show();
         return 0;
    }
    else {
    return (rssObject!=null && rssObject.items!=null)? rssObject.items.size():0;
    }
}

如果有效,请尝试。

请发布您的活动代码。@UmangBurman请检查。.我已经添加了代码。bro您已经给出了适配器类代码。。请给出活动类别代码。谢谢你的帮助。问题已经解决,多亏了帕夫尼特·辛格。我也想给托塔斯看。他还没有回答。我正在等待。看看下面我的答案。我的答案很好。感谢Pavneet…当对象和列表为空时,他们是否有办法显示Toast消息
@Override
public int getItemCount() {
    if (rssObject == null) {
        Toast.makeText(context, "rssObject is NUll", Toast.LENGTH_SHORT).show();
        return 0;
    } else {
        return (rssObject != null && rssObject.items != null) ?
               rssObject.items.size() : 0;
    }
}