java - RecyclerView 抛出 NullPointerException

标签 java android android-recyclerview

我的回收器 View 抛出java.lang.NullPointerException:

Attempt to invoke virtual method 'java.util.ArrayList com.msit.example.bunty.regform.entities.DataStore.getDataStore()' on a null object reference at com.msit.example.bunty.regform.adapters.MyRecyclerAdapter.getItemCount(MyRecyclerAdapter.java:65)

MyRecyclerAdapter.java

package com.msit.example.bunty.regform.adapters;

import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.R.*;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import com.msit.example.bunty.regform.R;
import com.msit.example.bunty.regform.entities.DataStore;
import com.msit.example.bunty.regform.entities.UserData;

import org.w3c.dom.Text;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/**l
 * Created by bunty on 1/5/16.
 */

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder>
{
    DataStore userDataStore=new DataStore();
    //ArrayList<UserData> userDataStore=new ArrayList<UserData>();
    public MyRecyclerAdapter(DataStore userDataStore)
    {
        this.userDataStore=userDataStore;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

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

       holder.fNameView.setText(userDataStore.getDataStore().get(position).getFirstName());
        holder.lNameView.setText(userDataStore.getDataStore().get(position).getLastName());
        holder.addressView.setText(userDataStore.getDataStore().get(position).getAddress());
        holder.cityView.setText(userDataStore.getDataStore().get(position).getCity());
        final String city=userDataStore.getDataStore().get(position).city;
        holder.cityView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),city,Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        if(!userDataStore.getDataStore().isEmpty()&&userDataStore.getDataStore()!=null) {
            return userDataStore.getDataStore().size();
        }
        else
        {
            return 0;
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

         TextView fNameView;
         TextView lNameView;
         TextView addressView;
         Button cityView;
         CardView cardView;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            fNameView = (TextView) itemView.findViewById(R.id.fn_view);
            lNameView = (TextView) itemView.findViewById(R.id.ln_view);
            addressView = (TextView) itemView.findViewById(R.id.addr_view);
            cityView=(Button)itemView.findViewById(R.id.city_view);
            cardView = (CardView) itemLayoutView.findViewById(R.id.card_list);
        }

    }
}

我有两个按钮“保存”和“show_details”,如果最初没有保存任何值,则当我单击“show_details”时应用程序崩溃,并在 getitemcount() 方法中引发异常。

最佳答案

像这样修复 getItemCount 方法

@Override 
public int getItemCount() { 
    if(userDataStore == null){return 0;}

     if(!userDataStore.getDataStore().isEmpty()&&userDataStore.getDataStore()!=null) {
            return userDataStore.getDataStore().size();
    } else{

            return 0;  
    }
 } 

关于java - RecyclerView 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684500/

相关文章:

android - 如果您有 Facebook 应用程序,是否可以通过 Android 上的 Facebook api 注销?

android - 如何使用多个证书签署 APK?

android - 在 Recycler View 中显示来自 firebase 的特定数据

android - 如何禁用回收器 View 滚动以便它监听 Scrollview 布局?

java - 如何使用 Javaparser 解析 for 循环?

java - box2d body 穿过其他 body

java - 当布局子项不适合时如何调整 LinearLayout 元素?

java - 在 ofEpochMilli 和 ofEpochSecond 之间切换

java - 拖放图像按钮消失在不同 View 后面

android - 交错网格布局管理器动态列数