SQLITE Android 更新数据时出现 NullPointerException
SQLITE Android NullPointerException when updating data
我有一个 SQLITE Android 问题。
我使用相同的 activity [CadastroCliente] 来注册和更新客户信息;为了定义我是要更新还是注册,我在主菜单 [ListarClientes] 中有一个名为 UPDATE 的 public 静态整数变量,其中 0 = 注册,1 = 更新。
所以它是这样的:
- 用户点击"edit info"
- 我告诉 register/update activity UPDATE 变量值为 1,所以它知道它处于编辑模式。
- 用户输入他想要更新的内容。
当他点击"save"按钮时,我调用的方法是这样的:
if (listarCliente.UPDATE == 0)
this.cadastrar();
if (listarCliente.UPDATE == 1)
this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
这是我得到的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.database.sqlite.SQLiteDatabase.update(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[])' on a null object reference
at dao.ClienteDAO.updateData(ClienteDAO.java:104)
at com.financeiro.coolkey.financeiro_2.CadastroCliente.onOptionsItemSelected(CadastroCliente.java:138)
我很困惑,因为当我从 ListarCliente activity 调用 "clienteDAO.updateData" 时,它就像一个魅力。但是当我将它发送到 CadastroCliente 时,它 returns 这个错误。有小费吗?
如果缺少任何信息,请告诉我,我一定会更新! :)
提前致谢!!!
-
-
额外信息:
dao.ClienteDAO.updateData(ClienteDAO.java:104)
public boolean updateData(long updateId, String nome, String email)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.Clientes.NOME, nome);
contentValues.put(DatabaseHelper.Clientes.EMAIL, email);
return database.update(DatabaseHelper.Clientes.TABELA, contentValues, DatabaseHelper.Clientes._ID + "=" + updateId, null) > 0;
}
com.financeiro.coolkey.financeiro_2.CadastroCliente.onOptionsItemSelected(CadastroCliente.java:138)
this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
activity 如何从 ListarClientes [主菜单] 启动:
UPDATE = 1;
startActivity(new Intent(ListarCliente.this, CadastroCliente.class));
完成调用updateData的onClick方法:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = (int) item.getItemId();
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
String nome = edtNome.getText().toString();
String email = edtEmail.getText().toString();
if (id == R.id.action_menu_salvar)
{
validacao = true;
if (nome == null || nome.equals(""))
{
validacao = false;
edtNome.setError(getString(R.string.mensagem_cadastro_erro));
}
if(email == null || email.equals(""))
{
validacao = false;
edtEmail.setError(getString(R.string.mensagem_cadastro_erro));
}
if(validacao)
{
if (listarCliente.UPDATE == 0)
this.cadastrar();
if (listarCliente.UPDATE == 1)
this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
finish();
startActivity(new Intent(this, ListarCliente.class));
}
}
if (id == R.id.action_menu_sair)
{
finish();
startActivity(new Intent(this, ListarCliente.class));
}
return super.onOptionsItemSelected(item);
}
初始化 clienteDAO 的位置:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro_cliente);
if (listarCliente.UPDATE == 0)
setTitle("Cadastro de Clientes");
else if (listarCliente.UPDATE == 1)
setTitle("Editar Dados do cliente");
clienteDAO = new ClienteDAO(this);
edtNome = (EditText) findViewById(R.id.cadastro_edtNome);
edtEmail = (EditText) findViewById(R.id.cadastro_edtEmail);
}
NullPointerException: Attempt to invoke virtual method
表示update
方法使用非初始化对象调用。所以在调用 update
方法
之前确保 database
不是 null
我有一个 SQLITE Android 问题。
我使用相同的 activity [CadastroCliente] 来注册和更新客户信息;为了定义我是要更新还是注册,我在主菜单 [ListarClientes] 中有一个名为 UPDATE 的 public 静态整数变量,其中 0 = 注册,1 = 更新。
所以它是这样的:
- 用户点击"edit info"
- 我告诉 register/update activity UPDATE 变量值为 1,所以它知道它处于编辑模式。
- 用户输入他想要更新的内容。
当他点击"save"按钮时,我调用的方法是这样的:
if (listarCliente.UPDATE == 0) this.cadastrar(); if (listarCliente.UPDATE == 1) this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
这是我得到的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.database.sqlite.SQLiteDatabase.update(java.lang.String, android.content.ContentValues, java.lang.String, java.lang.String[])' on a null object reference
at dao.ClienteDAO.updateData(ClienteDAO.java:104)
at com.financeiro.coolkey.financeiro_2.CadastroCliente.onOptionsItemSelected(CadastroCliente.java:138)
我很困惑,因为当我从 ListarCliente activity 调用 "clienteDAO.updateData" 时,它就像一个魅力。但是当我将它发送到 CadastroCliente 时,它 returns 这个错误。有小费吗?
如果缺少任何信息,请告诉我,我一定会更新! :)
提前致谢!!!
-
- 额外信息:
dao.ClienteDAO.updateData(ClienteDAO.java:104)
public boolean updateData(long updateId, String nome, String email)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.Clientes.NOME, nome);
contentValues.put(DatabaseHelper.Clientes.EMAIL, email);
return database.update(DatabaseHelper.Clientes.TABELA, contentValues, DatabaseHelper.Clientes._ID + "=" + updateId, null) > 0;
}
com.financeiro.coolkey.financeiro_2.CadastroCliente.onOptionsItemSelected(CadastroCliente.java:138)
this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
activity 如何从 ListarClientes [主菜单] 启动:
UPDATE = 1;
startActivity(new Intent(ListarCliente.this, CadastroCliente.class));
完成调用updateData的onClick方法:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = (int) item.getItemId();
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
String nome = edtNome.getText().toString();
String email = edtEmail.getText().toString();
if (id == R.id.action_menu_salvar)
{
validacao = true;
if (nome == null || nome.equals(""))
{
validacao = false;
edtNome.setError(getString(R.string.mensagem_cadastro_erro));
}
if(email == null || email.equals(""))
{
validacao = false;
edtEmail.setError(getString(R.string.mensagem_cadastro_erro));
}
if(validacao)
{
if (listarCliente.UPDATE == 0)
this.cadastrar();
if (listarCliente.UPDATE == 1)
this.clienteDAO.updateData(listarCliente.ID_CLIENTE, nome, email);
finish();
startActivity(new Intent(this, ListarCliente.class));
}
}
if (id == R.id.action_menu_sair)
{
finish();
startActivity(new Intent(this, ListarCliente.class));
}
return super.onOptionsItemSelected(item);
}
初始化 clienteDAO 的位置:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro_cliente);
if (listarCliente.UPDATE == 0)
setTitle("Cadastro de Clientes");
else if (listarCliente.UPDATE == 1)
setTitle("Editar Dados do cliente");
clienteDAO = new ClienteDAO(this);
edtNome = (EditText) findViewById(R.id.cadastro_edtNome);
edtEmail = (EditText) findViewById(R.id.cadastro_edtEmail);
}
NullPointerException: Attempt to invoke virtual method
表示update
方法使用非初始化对象调用。所以在调用 update
方法
database
不是 null