Firebase RecyclerView适配器Nullpointer异常

时间:2018-09-20 13:49:06

标签: android nullpointerexception

我正在尝试单击由Firebase recyclerview适配器控制的单个项目,因为出现一些运行时错误。

这是我的ImageViewHolder.class代码,并且我收到NullPOinter异常。

此异常是由mClickListener引起的,因此请给我一些解决此问题的方法,我对此没有正确的认识。

package com.humbingo.asthanews.Settings;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

import com.humbingo.asthanews.R;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;


public class ImageViewHolder extends RecyclerView.ViewHolder {

    private static final String TAG = "Firebase";
    private View mView;
    public Button shareBtn;
    public Context context;
    public ImageView imageView;


    private ImageViewHolder.ClickListener mClickListener;


    public ImageViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        shareBtn = mView.findViewById(R.id.btnShare);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mClickListener.onItemClick(v, getAdapterPosition());

            }
        });


        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                mClickListener.onItemLongClick(v, getAdapterPosition());
                return true;
            }
        });


    }


    public void setTitle(String title) {
        TextView mPostTitle = mView.findViewById(R.id.postTitle);
        Log.d(TAG, "This is Title||-- " + title);
        mPostTitle.setText(title);
    }

    public void setDesc(String desc) {
        TextView mPostDesc = mView.findViewById(R.id.postDesc);
        mPostDesc.setText(desc);
        Log.d(TAG, "This is Description||-- " + desc);
    }


    public void setImage(final Context ctx, final String imageStr) {
        imageView = mView.findViewById(R.id.postImg);
        // Picasso.with(ctx).load(imageStr).into(imageView);

        Picasso.with(ctx).load(imageStr).networkPolicy(NetworkPolicy.OFFLINE).into(imageView, new Callback() {
            @Override
            public void onSuccess() {


            }

            @Override
            public void onError() {
                Log.e(TAG, "setImage: Error Message ");
                Picasso.with(ctx).load(imageStr).into(imageView);


            }
        });


    }


    //Interface to send callbacks...
    public interface ClickListener{
        public void onItemClick(View view, int position);
        public void onItemLongClick(View view, int position);
    }

    public void setOnClickListener(ImageViewHolder.ClickListener clickListener){
        mClickListener = clickListener;
    }


}

1 个答案:

答案 0 :(得分:0)

  

一个人根本无法调用interface方法-但必须实现它们。

我的意思是,该接口本身似乎没有用,因为框架已经提供了必须实现的接口(这并不意味着“添加了更多接口”)。

它应该看起来像那样...

itemView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view, int resId) {
        ...
    }
});

itemView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        ...
        return true;
    }
});