Java 尝试在适配器AndroidStudio中的空对象引用上调用接口方法

Java 尝试在适配器AndroidStudio中的空对象引用上调用接口方法,java,android,rss,Java,Android,Rss,我正在尝试制作一个片段,它将向我展示RSS频道的新闻。我正在使用CardView的RecyclerView。我的程序显示了正确的新闻列表,但当我单击其中一条新闻时,我收到以下错误: java.lang.NullPointerException:尝试对空对象引用调用接口方法“void com.example.myapplication.Model.ItemClickListener.onClick(android.view.view,int,boolean)” 在com.example.myapp

我正在尝试制作一个片段,它将向我展示RSS频道的新闻。我正在使用CardView的RecyclerView。我的程序显示了正确的新闻列表,但当我单击其中一条新闻时,我收到以下错误:

java.lang.NullPointerException:尝试对空对象引用调用接口方法“void com.example.myapplication.Model.ItemClickListener.onClick(android.view.view,int,boolean)” 在com.example.myapplication.Model.FeedViewHolder.onClick(FeedAdapter.java:38)上

我的代码(FeedAdapter.java):

package com.example.myapplication.Model;
导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.myapplication.R;
类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,getBindingAdapterPosition(),false);
}
@凌驾
仅长按公共布尔值(视图v){
onClick(v,getBindingAdapterPosition(),true);
返回true;
}
}
公共类FeedAdapter扩展了RecyclerView.Adapter{
私有RSSObject RSSObject;
私有上下文;
私人充气机;
公共FeedAdapter(RSSObject RSSObject,Context mContext){
this.rssObject=rssObject;
this.mContext=mContext;
充气器=从(mContext)开始的充气器;
}
@非空
@凌驾
public FeedViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图项视图=充气机。充气(R.layout.row,父项,false);
返回新的FeedViewHolder(itemView);
}
@凌驾
BindViewHolder上的公共无效(@NonNull FeedViewHolder,int位置){
holder.txtTitle.setText(rssObject.getItems().get(position.getTitle());
holder.txtPubDate.setText(rssObject.getItems().get(position.getPubDate());
holder.txtContent.setText(rssObject.getItems().get(position.getContent());
Intent-browserIntent=newintent(Intent.ACTION_视图,Uri.parse(rssObject.getItems().get(position.getLink()));
browserIntent.addFlags(意图、标志、活动、新任务);
mContext.startActivity(浏览器内容);
}
@凌驾
public int getItemCount(){
返回rssObject.items.size();
}
}

在我的梦中,点击行对象后,浏览器应该会打开当前的新闻页面。但我不知道该怎么办。谢谢

您从未实际将侦听器设置为视图持有者,即从未调用
setItemClickListener

xD确实如此。非常感谢。有帮助
package com.example.myapplication.Model;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.myapplication.R;

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

        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

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

    @Override
    public void onClick(View v) {
        itemClickListener.onClick(v, getBindingAdapterPosition(), false);
    }

    @Override
    public boolean onLongClick(View v) {
        itemClickListener.onClick(v, getBindingAdapterPosition(), 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);

    }

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

    @Override
    public void onBindViewHolder(@NonNull 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());

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