簡體   English   中英

更新數據時,SQLITE Android NullPointerException

[英]SQLITE Android NullPointerException when updating data

我有一個SQLITE Android問題。

我正在使用同一活動[CadastroCliente]來注冊和更新客戶信息; 要定義我要更新還是注冊,我在主菜單[ListarClientes]中有一個稱為UPDATE的公共靜態整數變量,其中0 =注冊,1 =更新。

所以它是這樣的:

  1. 用戶點擊“編輯信息”
  2. 我告訴寄存器/更新活動UPDATE變量值為1,因此它知道它處於編輯模式。
  3. 用戶輸入要更新的內容。
  4. 當他單擊“保存”按鈕時,這就是我所說的方法:

      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活動中調用“ clienteDAO.updateData”時,它就像一個符咒。 但是,當我將其發送到CadastroCliente時,它將返回此錯誤。 有小費嗎?

如果缺少任何信息,請告訴我,我一定會更新! :)

提前致謝!!!

--

-額外信息:

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);

如何從ListarClientes [主菜單]啟動活動:

        UPDATE = 1;
        startActivity(new Intent(ListarCliente.this, CadastroCliente.class));

完整的onClick方法,其中up​​dateData稱為:

@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:嘗試調用虛擬方法

意味着使用非初始化對象調用update方法。 因此,在調用update方法之前,請確保database不為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM