Android - openOrCreateDatabase - null pointer exception

I have a DAO class, and when I call my conexao class, the method returns null, but why?

public void criarBanco() { Conexao conexao = new Conexao(); try { BANCO_DE_DADOS = conexao.abrirBanco(); // <<<<<<<<<<<<< String SQL = "CREATE TABLE IF NOT EXISTS tablecadastropessoa ( _id INTEGER PRIMARY KEY, nome TEXT, telefone TEXT)"; BANCO_DE_DADOS.execSQL(SQL); } catch (Exception e) { Log.i(TAG, "Erro ao criar o banco" + e); } finally { //conexao.fecharBanco(BANCO_DE_DADOS); } } // ABRIR BANCO public SQLiteDatabase abrirBanco(){ try { BANCO_DE_DADOS = openOrCreateDatabase(NOME_BANCO, MODE_PRIVATE, null); // RETURN NULL } catch (Exception e) { Util.exibirMensagem("Erro ao criar o banco: " + e, AulaCadastroActivity.context); Log.i(TAG, "Erro ao abrir o banco: " + e); } return BANCO_DE_DADOS; } 

ERROR

 07-05 13:12:54.800: E/AndroidRuntime(223): Uncaught handler: thread main exiting due to uncaught exception 07-05 13:12:54.811: E/AndroidRuntime(223): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.cadastro/br.cadastro.AulaCadastroActivity}: java.lang.NullPointerException 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.os.Handler.dispatchMessage(Handler.java:99) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.os.Looper.loop(Looper.java:123) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread.main(ActivityThread.java:4363) 07-05 13:12:54.811: E/AndroidRuntime(223): at java.lang.reflect.Method.invokeNative(Native Method) 07-05 13:12:54.811: E/AndroidRuntime(223): at java.lang.reflect.Method.invoke(Method.java:521) 07-05 13:12:54.811: E/AndroidRuntime(223): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-05 13:12:54.811: E/AndroidRuntime(223): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-05 13:12:54.811: E/AndroidRuntime(223): at dalvik.system.NativeStart.main(Native Method) 07-05 13:12:54.811: E/AndroidRuntime(223): Caused by: java.lang.NullPointerException 07-05 13:12:54.811: E/AndroidRuntime(223): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193) 07-05 13:12:54.811: E/AndroidRuntime(223): at br.cadastro.Conexao.abrirBanco(Conexao.java:20) 07-05 13:12:54.811: E/AndroidRuntime(223): at br.cadastro.ContadosDAO.criarBanco(ContadosDAO.java:27) 07-05 13:12:54.811: E/AndroidRuntime(223): at br.cadastro.AulaCadastroActivity.inicializar(AulaCadastroActivity.java:81) 07-05 13:12:54.811: E/AndroidRuntime(223): at br.cadastro.AulaCadastroActivity.onCreate(AulaCadastroActivity.java:27) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-05 13:12:54.811: E/AndroidRuntime(223): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 07-05 13:12:54.811: E/AndroidRuntime(223): ... 11 more 
+4
source share
1 answer

It is likely that NOME_BANCO not initializing on this line

 BANCO_DE_DADOS = openOrCreateDatabase(NOME_BANCO, MODE_PRIVATE, null); 

This means that you are actually going through:

 BANCO_DE_DADOS = openOrCreateDatabase(null, MODE_PRIVATE, null); 

Therefore, null pointer exception. Check that it is set to something, and that this is a valid path.

EDIT:

Change the file name to have the correct extension. .db

 private static String NOME_BANCO = "Cadastro"; 

becomes:

 private static String NOME_BANCO = "Cadastro.db"; 
+1
source

All Articles