运行我的应用程序时,我得到了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>