NullPointerException使用Firebase数据填充RecyclerView的自定义适配器

时间:2019-02-16 00:28:37

标签: android firebase-realtime-database android-recyclerview nullpointerexception custom-adapter

运行我的应用程序时,我得到了java.lang.NullPointerException。我尝试将所有变量和对象放入onDatachange方法中,以避免出现空数据,但出现此异常。

当我删除textview.setText类中的customAdapter方法时,它运行平稳,并且显示了RecyclerView,但没有填充数据!

public class prospectowner_listview extends AppCompatActivity {

    RecyclerView list;
    private DatabaseReference mFirebaseDatabase;
    private FirebaseDatabase mFirebaseInstance;
    Owner owner;
    customAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prospectowner_listview);

        list = findViewById(R.id.list);

        mFirebaseInstance = FirebaseDatabase.getInstance();
        mFirebaseDatabase = mFirebaseInstance.getReference("owners");
        mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                ArrayList <Owner> ownerlist = new ArrayList <>() ;

                for (DataSnapshot data : dataSnapshot.getChildren()) {
                    owner = data.getValue(Owner.class);

                    ownerlist.add(owner);
                    Log.d("onDataChange: ", ownerlist.toString());

                }
                LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
                list.setLayoutManager(manager);
                manager.setOrientation(LinearLayoutManager.VERTICAL);
                list.setItemAnimator( new DefaultItemAnimator());
                adapter= new customAdapter(prospectowner_listview.this, ownerlist);
                adapter.addData(ownerlist);
                list.setAdapter(adapter);

            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }
}

------------------------- CustomAdapter --------------------- ---------

public class customAdapter extends RecyclerView.Adapter <customAdapter.MyViewHolder> {

    private  ArrayList<com.example.android.e7gzlykora.Owner> ownerlist ;
    private Context mContext;

    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView name;
        public TextView field;
        public TextView mobile;
        public TextView address;
        public TextView cost;

        MyViewHolder(View itemView) {
            super(itemView);
            this.name = itemView.findViewById(R.id.name);
            this.field = itemView.findViewById(R.id.fieldName);
            this.mobile = itemView.findViewById(R.id.mobileowner);
            this.address = itemView.findViewById(R.id.address);
            this.cost = itemView.findViewById(R.id.cost);
        }
    }

    public customAdapter(Context c, ArrayList<com.example.android.e7gzlykora.Owner>  ownerlist) {
        this.mContext = c;
        this.ownerlist = ownerlist;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
            viewType) {
        return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.prospectowners, parent, false));

    }

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

        holder.name.setText(ownerlist.get(position).getName());
        holder.field.setText(ownerlist.get(position).getFieldname());
        holder.mobile.setText(ownerlist.get(position).getMobile());
        holder.address.setText(ownerlist.get(position).getAddress());
        holder.cost.setText(ownerlist.get(position).getCost());
    }

    @Override
    public int getItemCount() {
        return ownerlist.size();
    }

    public void addData(ArrayList<com.example.android.e7gzlykora.Owner> ownerlist ) {
        this.ownerlist = ownerlist;
        notifyDataSetChanged();
    }
}

---------------------------- Owner.class ---------------- ----------

@IgnoreExtraProperties
public class Owner extends ArrayList <Owner> {

    public String name;
    public String mobile;
    public String fieldname;
    public String address;
    public String cost;
    public String zone1;
    public String zone2;
    private Class thisClass;

    // Default constructor required for calls to
    // DataSnapshot.getValue(User.class)
    public Owner(){}

    public Owner(String name, String mobile,String fieldname,String address, String cost, String zone1, String zone2) {
        this.name = name;
        this.mobile = mobile;
        this.fieldname = fieldname;
        this.address = address;
        this.cost = cost;
        this.zone1 = zone1;
        this.zone2 = zone2;
    }

    public String getMobile() {
        return mobile;
    }

    public String getName() {
        return name;
    }

     public String getAddress() {
        return address;
     }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public void setCost(String cost) {
        this.cost = cost;
    }

    public void setZone1(String zone1) {
        this.zone1 = zone1;
    }

    public void setZone2(String zone2) {
        this.zone2 = zone2;
    }

    public String getFieldname() {
        return fieldname;
    }

    public void setFieldname(String fieldname) {
        this.fieldname = fieldname;
    }

    public String getCost() {
        return cost;
    }

    public String getZone1() {
        return zone1;
    }

    public String getZone2() {
        return zone2;
    }
}

---------------- prospectowners.xml ----------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/L1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/fieldName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="@android:color/black"
        android:textSize="12sp"
        android:textStyle="bold"
         />

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/nameowner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/fieldName"
        android:layout_marginStart="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="10dp"
        android:text=""
        android:textSize="12sp"
        android:textColor="@android:color/black"
        />

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/mobileowner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/nameowner"
        android:layout_marginStart="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="10dp"
        android:textColor="@android:color/black"
        android:textSize="12sp"
        />

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/mobileowner"
        android:layout_marginStart="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="10dp"
        android:textSize="12sp"
        android:textColor="@android:color/black"
         />

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/cost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/address"
        android:layout_marginStart="50dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="10dp"
        android:textSize="12sp"
        android:textColor="@android:color/black"
         />

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/reserve"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cost"
        android:onClick="reserve"
        android:layout_marginStart="230dp"
        android:layout_marginLeft="270dp"
        android:layout_marginTop="10dp"
        android:text="E7gzly"
        android:textSize="15dp"
         />

</LinearLayout>

------------------- prospectowner_listView.xml ------------- -------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin">

    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout="@layout/prospectowners"
     />

</LinearLayout>

0 个答案:

没有答案