我有我的类DAO,当我调用我的类conexao时,方法返回null,但为什么呢?
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; }
错误是
07-05 13:12:54.800: E/AndroIDRuntime(223): Uncaught handler: thread main exiting due to uncaught exception07-05 13:12:54.811: E/AndroIDRuntime(223): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.cadastro/br.cadastro.AulaCadastroActivity}: java.lang.NullPointerException07-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.access00(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.NullPointerException07-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
解决方法:
很可能NOME_BANCO未在此行中初始化
BANCO_DE_DADOS = openorCreateDatabase(NOME_BANCO, MODE_PRIVATE, null);
这意味着你实际上在传递:
BANCO_DE_DADOS = openorCreateDatabase(null, MODE_PRIVATE, null);
因此空指针异常.请检查它是否设置为某个东西,并且它是一个有效的路径.
编辑:
更改文件名以具有正确的扩展名. .D b
private static String NOME_BANCO = "Cadastro";
变为:
private static String NOME_BANCO = "Cadastro.db";
总结 以上是内存溢出为你收集整理的Android – openOrCreateDatabase – 空指针异常全部内容,希望文章能够帮你解决Android – openOrCreateDatabase – 空指针异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)