带有 RealmList 的数组适配器:尝试在空对象引用上调用虚拟方法



我只是想用复选框为我的列表创建适配器,我正在使用 Realm 作为我的数据库。

我找到了空对象引用。java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.app.Activity.findViewById(int)'。

public class DialogActivity extends AppCompatActivity {
Realm realm;
private RealmList<DetailPerson> person;
private ListView listView;
private MenuAdapter adapter;
private String bill;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_add_menu);
    bill = getIntent().getStringExtra("bill_ID");
    realm = Realm.getDefaultInstance();
    listView = (ListView) findViewById(R.id.listViewMenu);
    person = realm.where(Bill.class).equalTo("Bill_ID",     bill).findFirst().getDetailperson();
    adapter = new MenuAdapter(this,R.layout.row_menu,person);
    listView.setAdapter(adapter);

}
}

比尔.java

public class Bill extends RealmObject {

@PrimaryKey private String Bill_ID;
public RealmList<DetailMenu> detailmenu;
public RealmList<DetailPerson> detailperson;
private String name;
private int price;
public RealmList<DetailPerson> getDetailperson() {
    return detailperson;
}
public void setDetailperson(RealmList<DetailPerson> detailperson) {
    this.detailperson = detailperson;
}
public RealmList<DetailMenu> getDetailmenu() {
    return detailmenu;
}
public void setDetailmenu(RealmList<DetailMenu> detailmenu) {
    this.detailmenu = detailmenu;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getPrice() {
    return price;
}
public void setPrice(int price) { this.price = price; }
public String getBill_ID() {
    return Bill_ID;
}
public void setBill_ID(String bill_ID) {
    Bill_ID = bill_ID;
}
}

菜单适配器.java

public class MenuAdapter extends ArrayAdapter<DetailPerson>{
private RealmList<DetailPerson> persons;
private Context context;
Realm realm;
private LayoutInflater inflater;
public MenuAdapter(Context context, int resource, RealmList<DetailPerson> objects) {
    super(context, resource, objects);
    this.context = context;
    this.persons = objects;
}

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
}
@Override
public int getCount() {
    return persons.size();
}
private class ViewHolder {
    TextView menuItem;
    CheckBox checkBoxMenu;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.row_menu, null); //there its the error come from.
        holder = new ViewHolder();
        holder.menuItem = (TextView) convertView.findViewById(R.id.textViewMenuItem);
        holder.checkBoxMenu = (CheckBox) convertView.findViewById(R.id.checkBoxMenu);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.menuItem.setText(" (" +  persons.get(position).getPersonID() + ")");
    holder.checkBoxMenu.setText(persons.get(position).getPersonName());
    holder.checkBoxMenu.setChecked(false);
    holder.checkBoxMenu.setTag(persons);
    return convertView;
}
}

你缺少初始化你的inflater对象,你可以而且应该在你的MenuAdapter构造函数中这样做,例如这里

public MenuAdapter(Context context, int resource, RealmList<DetailPerson> objects) {
    super(context, resource, objects);
    this.context = context;
    this.persons = objects;
    inflater = LayoutInflater.from(context);
}

相关内容

最新更新