java.lang.Nullpointerexception: Attempt to invoke virtual method on a null Object Reference

Asked

Viewed 4,030 times

0

I’m trying to enter some values in the bank, but you’re always giving exception.

My class that inserts in 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;
}

Help me please That is the mistake:

06-03 01:56:20.536 31451-31451/com.example.myapplicationbanco E/Androidruntime: FATAL EXCEPTION: main Process: com.example.myapplicationbanco, PID: 31451 java.lang.Nullpointerexception: Attempt to invoke virtual method 'Boolean com.example.myapplicationbanco.DatabaseHelper.cadastrarUsuario(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null Object Reference at com.example.myapplicationbanco.Confirmacadastroactivity$1.onClick(Confirmacadastroactivity.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 principalActivity:

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


    }
}
  • 1

    apparently Principalactivity.myDb is not instantiated (is null) has the code to post Principalactivity?

  • There you go. Thank you

1 answer

1


1 - It is important to give myDB.close(), if not the connection to the bank is open forever, costing the device 2 - Do not be afraid to instantiate the bank more than once. null Pointer is appearing because you are referring to the myDB of the other Activity which is statically null. The ideal is you instantiate the bank whenever you need to use it and then give a db.close().

So instead of writing:

else {

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

Write:

else {
DatabaseHelper mydb = new DatabaseHelper(this);
isInserted = myDb.cadastrarUsuario(nome, email, senha, cpf, data);
myDb.close();
  • Thank you. It helped a lot! Thank you very much!

  • But now I’m having trouble with the cursor that calls the loadUsuario and loadUsuarioEmail. No error, it just doesn’t return anything. I have already given db.close(); both in the Databasehelper methods and in the classes that call the methods, and still yes of this problem. The query does not return

Browser other questions tagged

You are not signed in. Login or sign up in order to post.