openOrCreateDatabase不起作用

时间:2012-02-15 12:16:16

标签: android database nullpointerexception

我需要帮助。 我有一个ListView与自定义适配器,当在这个ListView我有一个CheckBox和onClick方法应该更新我的数据库中的表。 我的CheckBox的onClick方法是在我的Adapter类中实现的,当我点击一些CheckBox时,我在创建ListView时调用了我的另一个类的方法。

在我的Adapter Classe

中 #
chkQuitado.setOnClickListener(new View.OnClickListener() {
@Override
  public void onClick(View v) {
    CheckBox cb = (CheckBox) v;
    ViewMovimentos vm = new ViewMovimentos();

    int movId = Integer.parseInt(entry.getMovId());
    if(cb.isChecked()){
     vm.confirmaQuitacao(context, movId); //Implementada na classe ViewMovimentos
    }else{
     vm.desfazQuitacao(context, movId); //Implementada na classe ViewMovimentos
   }
  }
});

在我的Movimentos.class中,我实现了我的方法confirmmaQuitacao()和desfazQuitacao()

public void confirmaQuitacao(Context context, final int movId){
   AlertDialog.Builder builder = new AlertDialog.Builder(context);
   builder.setMessage("Confirma a quitação deste movimento?");
   builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
   @Override
    public void onClick(DialogInterface dialog, int which) {
       quitaMovimento(movId, MOV_FECHADO);
   }
});
builder.setNeutralButton("Não", null);


builder.setTitle("Aviso");
builder.show();
}

public void desfazQuitacao(Context context, final int movId){
   AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("Deseja marcar esse movimento como não quitado?");
    builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
   @Override
    public void onClick(DialogInterface dialog, int which) {
     quitaMovimento(movId, MOV_ABERTO);
    }
});
builder.setNeutralButton("Não", null);


builder.setTitle("Aviso");
builder.show();
}

当这两个方法调用quitaMovimento方法时。

public void quitaMovimento(int movId, int quitar){
   SQLiteDatabase banco = openOrCreateDatabase(nmBanco, MODE_WORLD_WRITEABLE, null);

   ContentValues camposPar = new ContentValues();
   camposPar.put("movQuitado", quitar);
   banco.update("movimentos", camposPar, "movId = "+movId, null);

   localizaRegistros();
}

因此,当我调用openOrCreateDatabase()时,我的应用程序中发生了一个强制关闭,并且logcat在下面显示错误。

02-14 22:47:33.645: E/AndroidRuntime(367): Uncaught handler: thread main exiting due to uncaught exception
02-14 22:47:33.749: E/AndroidRuntime(367): java.lang.NullPointerException
02-14 22:47:33.749: E/AndroidRuntime(367): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
02-14 22:47:33.749: E/AndroidRuntime(367): at com.simpatico.sgf.ViewMovimentos.quitaMovimento(ViewMovimentos.java:433)
02-14 22:47:33.749: E/AndroidRuntime(367): at com.simpatico.sgf.ViewMovimentos$7.onClick(ViewMovimentos.java:450)
02-14 22:47:33.749: E/AndroidRuntime(367): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
02-14 22:47:33.749: E/AndroidRuntime(367): at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 22:47:33.749: E/AndroidRuntime(367): at android.os.Looper.loop(Looper.java:123)
02-14 22:47:33.749: E/AndroidRuntime(367): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-14 22:47:33.749: E/AndroidRuntime(367): at java.lang.reflect.Method.invokeNative(Native Method)
02-14 22:47:33.749: E/AndroidRuntime(367): at java.lang.reflect.Method.invoke(Method.java:521)
02-14 22:47:33.749: E/AndroidRuntime(367): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-14 22:47:33.749: E/AndroidRuntime(367): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-14 22:47:33.749: E/AndroidRuntime(367): at dalvik.system.NativeStart.main(Native Method)

有人可以帮我解决这个问题吗?

感谢的

1 个答案:

答案 0 :(得分:0)

openOrCreateDatabase的一些参数被记录为可选,但这并不意味着您可以为这些参数传递null;这意味着你应该在你根本没有传递这些参数的情况下使用重载。

以下是一种适合您的语法:

SQLiteDatabase banco = openDatabase(nmBanco, MODE_WORLD_WRITEABLE, SQLiteDatabase.CREATE_IF_NECESSARY)