我是开发 Android 应用程序的新手,我不明白为什么我的应用程序会崩溃。这是代码:
public class ProductListActivity extends ListActivity {
private ProductDataSource datasource;
private ListView lv;
private ArrayAdapter<Product> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_list);
this.addListenerOnAddNewProductButton();
datasource = new ProductDataSource(this);
datasource.open();
datasource.deleteAllProducts();
List<Product> values = datasource.getAllProducts();
lv = (ListView) findViewById(android.R.id.list);
adapter = new ArrayAdapter<Product>(
this,
android.R.layout.simple_list_item_1,
values );
lv.setAdapter(adapter);
}
private void addListenerOnAddNewProductButton() {
Button btn = (Button) findViewById(R.id.add_new);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText addProductInput = (EditText) findViewById(R.id.add_product_text);
String newProductName = addProductInput.getText().toString();
Product addedProduct = datasource.createProduct(newProductName);
ArrayAdapter<Product> adapter = (ArrayAdapter<Product>) getListAdapter();
adapter.add(addedProduct);
Toast.makeText(getApplicationContext(), "Product added", Toast.LENGTH_LONG).show();
addProductInput.setText("");
}
});
}
我不明白为什么将产品添加到数据库,但我仍然收到错误消息,告诉我我正在尝试对空对象调用方法。
错误:
Attempt to invoke virtual method 'void android.widget.ArrayAdapter.add(java.lang.Object)' on a null object reference
我已经在 SO 上看到过类似的主题,但它对我没有帮助 - 如您所见,我在此类中将我的适配器声明为全局变量。怎么回事?
最佳答案
您需要使用 setListAdapter ListActivity
中的方法,而不是使用 ListView
中的方法。
在onCreate中,你可以做:
setListAdapter(adapter);
代替
lv.setAdapter(adapter);
关于Android - 尝试将项目添加到数据库时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333792/