java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference

0

I'm trying to insert some values in the database, but it's always giving an exception.

My class that enters the bank:

private String email;
private int codigo;

private Button btnOkay;
private Button btnCancelar;
private EditText codigoConfirmaCadastro;
private TextView reenviarEmail;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_confirma_cadastro);

    try {
        Intent intent = getIntent();

        if (intent != null) {
            email = intent.getStringExtra(Intent.EXTRA_EMAIL);
        }

        Bundle extras = getIntent().getExtras();
        final String nome = extras.getString("nome");
        final String cpf = extras.getString("cpf");
        final String data = extras.getString("data");
        final String senha = extras.getString("senha");


        enviaEmailConfirmacao();

        btnOkay = (Button)findViewById(R.id.btn_okayConfirmaCadastro);
        btnCancelar = (Button)findViewById(R.id.btn_cancelarConfirmaCadastro);
        codigoConfirmaCadastro = (EditText)findViewById(R.id.codigo_confirmaCadastro);
        reenviarEmail = (TextView)findViewById(R.id.reenviar_email);


        btnOkay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    String text = codigoConfirmaCadastro.getText().toString();
                    text.trim();
                    boolean isInserted;
                    if(text.isEmpty()) {
                        throw new Exception("Informe o código.");
                    }

                    int cod = Integer.parseInt(text);

                    if (cod != codigo) {
                        throw new Exception("Informe o código correto");
                    } else {

                        isInserted = PrincipalActivity.myDb.cadastrarUsuario(nome, email, senha, cpf, data);

                        if (isInserted == true) {
                            Intent intent = new Intent(ConfirmaCadastroActivity.this, LoginActivity.class);
                            startActivity(intent);
                        } else {
                            throw new Exception("Houve algúm erro ao cadastrar o usuário");
                        }
                    }
                } catch (Exception ex) {
                    Toast.makeText(ConfirmaCadastroActivity.this, ex.getMessage(), Toast.LENGTH_LONG).show();

                }

            }
        });

        btnCancelar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        reenviarEmail.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                enviaEmailConfirmacao();
                Toast.makeText(ConfirmaCadastroActivity.this, "E-mail enviado, se o problema persistir, verifique o e-mail informado",
                        Toast.LENGTH_LONG).show();
            }
        });


    } catch (Exception ex) {
        Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();

    }
}

Bank Class:

public static final String NOME_BANCO = "banco.db";
public static final int VERSION = 5;

public static final String tabela_produto = "produto", nome_produto = "nome_produto", cod_produto = "cod_produto",
categoria = "categoria", peso = "peso", preco = "preco";
public static final String tabela_usuario = "usuario", nome_usu = "nome_usu", email = "email", senha = "senha",
cpf = "cpf", dt_nasc = "dt_nasc";
public static final String tabela_carrinho = "carrinho", nome_produto_carrinho = "nome_produto_carrinho",
cod_produto_carrinho = "cod_produto_carrinho", categoria_carrinho = "categoria_carrinho", peso_carrinho = "peso_carrinho",
preco_carrinho = "preco_carrinho", qtd_carrinho = "qtd_carrinho";
public static final String tabela_lista = "lista", nome_produto_lista = "nome_produto_lista";

public DatabaseHelper(Context context) {
    super(context, NOME_BANCO, null, VERSION);
    SQLiteDatabase db = this.getWritableDatabase();
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE " + tabela_produto + " (" +
            nome_produto + " text, " +
            cod_produto + " text primary key, " +
            categoria + " text, " +
            peso + " text, " +
            preco + " integer)");


    db.execSQL("CREATE TABLE " + tabela_usuario + " (" +
            nome_usu + " text, " +
            email + " text, " +
            senha + " text, " +
            cpf + " text primary key, " +
            dt_nasc + " date)");

    db.execSQL("CREATE TABLE " + tabela_carrinho  + " (" +
            nome_produto_carrinho + " text, " +
            cod_produto_carrinho + " text primary key, " +
            categoria_carrinho + " text, " +
            peso_carrinho + " text, " +
            preco_carrinho + " integer)");

    db.execSQL("CREATE TABLE " + tabela_lista + " (" +
            nome_produto_lista + " text)");



}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE " + tabela_produto);
    db.execSQL("DROP TABLE " + tabela_usuario);
    db.execSQL("DROP TABLE " + tabela_carrinho);
    db.execSQL("DROP TABLE " + tabela_lista);
    onCreate(db);
    db.execSQL("ALTER TABLE " + tabela_carrinho + " ADD COLUMN " + qtd_carrinho + " integer");

}

public boolean inserirProduto(String nome_produto1, String cod_produto1, String categoria1, String peso1, int preco1) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(nome_produto, nome_produto1);
    contentValues.put(cod_produto, cod_produto1);
    contentValues.put(categoria, categoria1);
    contentValues.put(peso, peso1);
    contentValues.put(preco, preco1);

    long result = db.insert(tabela_produto, null, contentValues);

    if (result == -1)
        return false;
    else
        return true;
}

public Cursor carregaDados() {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res = db.rawQuery("SELECT * FROM " + tabela_produto, null);
    return res;
}

public Cursor carregaDadoPorCodigo(String scanCodigo) {

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res;
    String[] campos = {nome_produto, cod_produto, categoria, peso, preco};
    String where = cod_produto + " = " + scanCodigo;

    res = db.query(tabela_produto, campos, where, null, null, null, null, null);

    if (res != null) {
        res.moveToFirst();
    }
    db.close();
    return res;
}


public Cursor carregaDadosCarrinho() {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res = db.rawQuery("SELECT * FROM " + tabela_carrinho, null);
    return res;
}


public Integer deletaTudo() {
    SQLiteDatabase db = this.getWritableDatabase();

    return db.delete(tabela_produto, null, null) + db.delete(tabela_carrinho, null, null);
}

public boolean inserirProdutoCarrinho(String nome_produto1, String cod_produto1, String categoria1, String peso1,
                                      int preco1, int qtd) {

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(nome_produto_carrinho, nome_produto1);
    contentValues.put(cod_produto_carrinho, cod_produto1);
    contentValues.put(categoria_carrinho, categoria1);
    contentValues.put(peso_carrinho, peso1);
    contentValues.put(preco_carrinho, preco1);
    contentValues.put(qtd_carrinho, qtd);

    long result = db.insert(tabela_carrinho, null, contentValues);

    if (result == -1)
        return false;
    else
        return true;
}

public boolean alteraQTD(String codigo, int quantidade) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues valores;

    valores = new ContentValues();
    valores.put(qtd_carrinho, quantidade);

    db.update(tabela_carrinho, valores, cod_produto_carrinho + " = ?", new String[] {codigo});
    db.close();

    return true;
}

public boolean cadastrarUsuario(String nome_usu1, String email1, String senha1, String cpf1, String dt_nasc1) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues valores = new ContentValues();
    valores.put(nome_usu, nome_usu1);
    valores.put(email, email1);
    valores.put(senha, senha1);
    valores.put(cpf, cpf1);
    valores.put(dt_nasc, dt_nasc1);

    long resultado = db.insert(tabela_usuario, null, valores);

    if(resultado == -1) {
        return false;
    } else {
        return true;
    }
}

public Cursor carregaUsuario(String email1, String senha1) {

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res;
    String[] campos = {email, senha};
    String where = email + " = " + email1 + " AND " + senha + " = " + senha1;

    res = db.query(tabela_usuario, campos, where, null, null, null, null, null);

    if (res != null) {
        res.moveToFirst();
    }
    db.close();
    return res;
}

public Cursor carregaUsuarioEmail(String email1) {

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor res;
    String[] campos = {nome_usu, email, senha, cpf};
    String where = email + " = " + email1;

    res = db.query(tabela_usuario, campos, where, null, null, null, null, null);

    if (res != null) {
        res.moveToFirst();
    }
    db.close();
    return res;
}

Please help me please This is the error:

  

06-03 01: 56: 20.536 31451-31451 / com.example.myapplicationbank   E / AndroidRuntime: FATAL EXCEPTION: main                                                                                   Process: com.example.myapplicationbank, PID: 31451                                                                                   java.lang.NullPointerException: Attempt to invoke virtual method   boolean   com.example.myapplicationbanco.DatabaseHelper.addressUser (java.lang.String,   java.lang.String, java.lang.String, java.lang.String,   java.lang.String) 'on a null object reference                                                                                       at   com.example.myapplicationbank.ConfirmCadastroActivity $ 1.onClick (ConfirmCadastroActivity.java:69)                                                                                       at android.view.View.performClick (View.java:5201)                                                                                       at android.view.View $ PerformClick.run (View.java:21163)                                                                                       at android.os.Handler.handleCallback (Handler.java:746)                                                                                       at android.os.Handler.dispatchMessage (Handler.java:95)                                                                                       at android.os.Looper.loop (Looper.java:148)                                                                                       at android.app.ActivityThread.main (ActivityThread.java:5443)                                                                                       at java.lang.reflect.Method.invoke (Native Method)                                                                                       at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:728)                                                                                       at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)

The mainActivity:

public class PrincipalActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    public static DatabaseHelper myDb;
    private ListView catalogoCategoriaList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        myDb = new DatabaseHelper(this);

        myDb.inserirProduto("Feijão", "48579", "Alimentos", "1", 3);
        myDb.inserirProduto("Arroz", "666777", "Alimentos", "1", 2);
        myDb.inserirProduto("Macarrão", "4823421", "Alimentos", "0.5", 2);
        myDb.inserirProduto("Vodka", "216584", "Bebidas", "1", 8);
        myDb.inserirProduto("Coca-cola", "498437", "Bebidas", "2,5", 7);
        myDb.inserirProduto("Fraldas", "798458", "Bebes", "2", 30);
        myDb.inserirProduto("Molho-Shoyo", "242526", "Temperos", "0.25", 2);
        myDb.inserirProduto("Banana", "161719", "Frutas", "1", 4);


        catalogoCategoriaList = (ListView)findViewById(R.id.listView_categoria);


        ArrayAdapter<String> adpDados;

        final ArrayList<String> categorias = new ArrayList<>();

        Cursor cursor = myDb.carregaDados();

        while(cursor.moveToNext()) {
            if (!categorias.contains(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.categoria)))) {
                categorias.add(cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.categoria)));
            }
        }

        adpDados = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, categorias);
        catalogoCategoriaList.setAdapter(adpDados);
        catalogoCategoriaList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(getApplicationContext(), ProdutosCatalogoActivity.class);
                    String categoria1 = categorias.get(position);
                    intent.putExtra("categoria1", categoria1);
                    startActivity(intent);
            }
        });


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.principal, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_scan) {
            IntentIntegrator scan = new IntentIntegrator(this);
            scan.initiateScan();
        } else if (id == R.id.nav_carrinho) {

            Intent it = new Intent(this, CarrinhoActivity.class);
            startActivity(it);

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_terminar) {

            myDb.deletaTudo();
            finish();

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        IntentResult resultado = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

        if(resultado != null) {
            final String scanCodigo = resultado.getContents();

            final Cursor res = myDb.carregaDadoPorCodigo(scanCodigo);



                AlertDialog ad = new AlertDialog.Builder(this).create();
                ad.setTitle("Deseja adicionar ao carrinho?");
                ad.setMessage("Nome: " + res.getString(res.getColumnIndexOrThrow(DatabaseHelper.nome_produto)) + "\n"
                            +"Código: " + res.getString(res.getColumnIndexOrThrow(DatabaseHelper.cod_produto)) + "\n"
                            +"Categoria: " + res.getString(res.getColumnIndexOrThrow(DatabaseHelper.categoria)) + "\n"
                            +"Peso: " + res.getString(res.getColumnIndexOrThrow(DatabaseHelper.peso)) + "\n"
                            + "Preço: " + res.getString(res.getColumnIndexOrThrow(DatabaseHelper.preco)));
                ad.setButton(DialogInterface.BUTTON_POSITIVE, "Sim", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        int qtd = 1;

                       boolean isInserted = myDb.inserirProdutoCarrinho(res.getString(res.getColumnIndexOrThrow(DatabaseHelper.nome_produto)),
                                res.getString(res.getColumnIndexOrThrow(DatabaseHelper.cod_produto)),
                                res.getString(res.getColumnIndexOrThrow(DatabaseHelper.categoria)),
                                res.getString(res.getColumnIndexOrThrow(DatabaseHelper.peso)),
                                Integer.parseInt(res.getString(res.getColumnIndexOrThrow(DatabaseHelper.preco))), qtd);

                        if (isInserted == true) {
                            Toast.makeText(PrincipalActivity.this, "Produto adicionado ao carrinho.", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(PrincipalActivity.this, "Este Produto já existe no seu carrinho", Toast.LENGTH_SHORT).show();

                        }

                    }
                });
                ad.setButton(DialogInterface.BUTTON_NEGATIVE, "Nâo", new DialogInterface.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(PrincipalActivity.this, "Produto não adicionado ao carrinho.", Toast.LENGTH_SHORT).show();
                    }
                });


                ad.show();


        } if(resultado == null) {
            Toast.makeText(PrincipalActivity.this, "Desculpe, nenhum código de barras encontrado.", Toast.LENGTH_SHORT).show();
        }


    }
}
    
asked by anonymous 03.06.2016 / 07:00

1 answer

1

1 - It is important to give myDB.close (), otherwise the connection to the bank stays open forever, costing the device 2 - Do not be afraid to instantiate the bank more than once. The null pointer is showing up because you are referencing the myDB of the other activity that is statically null. Ideally you instantiate the database whenever you need to use it and then give it a db.close ().

So instead of writing:

else {

isInserted = PrincipalActivity.myDb.cadastrarUsuario(nome, email, senha, cpf, data);

Type:

else {
DatabaseHelper mydb = new DatabaseHelper(this);
isInserted = myDb.cadastrarUsuario(nome, email, senha, cpf, data);
myDb.close();
    
07.06.2016 / 05:15