java - 尝试执行databasehelper的delete方法时出现nullpointerexecption

标签 java android database sqlite

我是 Android 新手,我正在创建应用程序联系人应用程序 我试图从表中删除一行,但它给了我空指针异常,如下面的日志所示

这表明删除方法正在获取空值,但通过 bundle 我获得了正确的值,并且我在 deketecontact 方法中传递了相同的值。

com.example.ViewRecord
public class ViewRecord extends Activity {
int val;
SQLiteDatabase sdb;
databaseHelper dbh;
//=new databaseHelper(getBaseContext(), "stud", null, 1);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_record);
    Bundle b = getIntent().getExtras();
    if(b!=null){
        String n=b.getString("pname").toUpperCase(Locale.ENGLISH);
        TextView t= (TextView) findViewById(R.id.tv1);
        t.setText("WELCOME "+ n);
        val = b.getInt("pid");

    }
    Button del= (Button) findViewById(R.id.button1);
    del.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            AlertDialog.Builder builder = new AlertDialog.Builder(ViewRecord.this);
            builder.setMessage(R.string.deleteContact)
           .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                  dbh.deleteContact(val);
                  Toast.makeText(getApplicationContext(), "Deleted Successfully",
                  Toast.LENGTH_SHORT).show();      
                  Intent intent = new Intent(getApplicationContext(),AddRecord.class);
                  startActivity(intent);
               }
            })
           .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                  // User cancelled the dialog
               }
            });
            AlertDialog d = builder.create();
            d.setTitle("Are you sure");
            d.show();



        }
    });
}

}

  //and this is delete method in databasehelper.class
  public Integer deleteContact (Integer id)
   {
      Log.d("val1", ""+id);
      SQLiteDatabase db = this.getWritableDatabase();
     // db.delete("studrec", "id=", null);
      return db.delete("studrec", 
      "id = ? ",new String[] { Integer.toString(id) });
   }

日志文件

    01-10 19:19:00.680: E/AndroidRuntime(10261): FATAL EXCEPTION: main
01-10 19:19:00.680: E/AndroidRuntime(10261): Process: com.assign6, PID: 10261
01-10 19:19:00.680: E/AndroidRuntime(10261): java.lang.NullPointerException: Attempt to invoke                                   virtual method 'java.lang.Integer com.assign6.databaseHelper.deleteContact(java.lang.Integer)' on a null object reference
01-10 19:19:00.680: E/AndroidRuntime(10261):    at com.assign6.ViewRecord$1.onClick(ViewRecord.java:66)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.view.View.performClick(View.java:4756)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.view.View$PerformClick.run(View.java:19749)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.os.Handler.handleCallback(Handler.java:739)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.os.Looper.loop(Looper.java:135)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at android.app.ActivityThread.main(ActivityThread.java:5221)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at java.lang.reflect.Method.invoke(Native Method)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at java.lang.reflect.Method.invoke(Method.java:372)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-10 19:19:00.680: E/AndroidRuntime(10261):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

最佳答案

NullPointerException: Attempt to invoke virtual method 'java.lang.Integer com.example.databaseHelper.deleteContact

因为在使用dbh对象调用deleteContact之前,您没有初始化databaseHelper类的dbh对象。在调用方法之前初始化它:

dbh=new databaseHelper(...);
dbh.deleteContact(val);

关于java - 尝试执行databasehelper的delete方法时出现nullpointerexecption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27877150/

相关文章:

Java Webstart 尝试将 jar 沙箱化为 "Trusted-Library"

java - 通过POST访问URL时获取 "Transport error: 401 Error: Unauthorized"

android - Intent 在 NavigationDrawerFragment 中不起作用

android - 如果我们在 android 中隐藏 edittext,如何删除空格?

mysql - 在 mysql select 中设置不同的 lower 和 upper

java - 如何在 Android Studio 1.0.1 上运行 Facebook 示例应用程序

java - 使用来自 mockito-junit-jupiter 的 MockitoExtension 在构造函数测试类中进行空模拟

android - android中的蓝牙打印

php - 自定义连接查询以获取 4 个表的结果

android - 在android中将SQLite数据库与远程mysql数据同步