Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将复选框值保存到数据库时获取空指针异常_Android_Sqlite - Fatal编程技术网

Android 将复选框值保存到数据库时获取空指针异常

Android 将复选框值保存到数据库时获取空指针异常,android,sqlite,Android,Sqlite,我想将复选框值添加到数据库中,但它在logcat中显示错误,我已将我的值存储在变量“ta”中,并对其进行了烘焙,然后它开始工作,当我将该值插入数据库时,它显示错误 package com.example.hhh; import android.os.Build; import android.os.Bundle; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android

我想将复选框值添加到数据库中,但它在logcat中显示错误,我已将我的值存储在变量“ta”中,并对其进行了烘焙,然后它开始工作,当我将该值插入数据库时,它显示错误

package com.example.hhh;

import android.os.Build;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener {

CheckBox ct1,ct2,ct3,ct4;
protected DatabaseAdapter helper;
String ta;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    helper=new DatabaseAdapter(this);
    helper.open();

        ct1=(CheckBox)findViewById(R.id.checkBox1);
        ct2=(CheckBox)findViewById(R.id.checkBox2);
        ct3=(CheckBox)findViewById(R.id.checkBox3);
        ct4=(CheckBox)findViewById(R.id.checkBox4);

        ct1.setOnClickListener(this);
        ct2.setOnClickListener(this);
        ct3.setOnClickListener(this);
        ct4.setOnClickListener(this);



}




@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    CheckBox ct=(CheckBox)v;
    if(ct.isChecked())
    {
         ta=ct.getText().toString();
         helper.Add(ta);
            Toast.makeText(MainActivity.this, ""+ta,

    Toast.LENGTH_SHORT).show();
            helper.close();


    }
}





 }
abd数据库类是 包com.example.hhh

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseAdapter {

SQLiteDatabase db;
DatabaseHelper helper;
public static final String DATABASE="Hotel";
public static final int VERSION=2;
public static final String query="create table hhh(id integer primary key,room text
    not null)";
private Context ctx;

public DatabaseAdapter(Context ctx) {
    super();
    this.ctx=ctx;
}





public class DatabaseHelper extends SQLiteOpenHelper
{

    public DatabaseHelper(Context context
    ) {
        super(context, DATABASE, null, VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }

}





public DatabaseAdapter open() {
    helper=new DatabaseHelper(ctx);
    db=helper.getWritableDatabase();
    return this;
    // TODO Auto-generated method stub

}





public void close() {
    // TODO Auto-generated method stub
    helper.close();
}

public long Add(String ta)
{
    ContentValues vals=new ContentValues();
    vals.put("room", ta);
    long a=db.insert("Hotel", null, vals);
    return a;

}



  }

我通过在open()方法中初始化“db”解决了这个问题。

看起来您还没有初始化
db
,所以当您尝试调用
insert()
时,您会得到一个
NPE
。你已经在这里申报了

public class DatabaseAdapter {

SQLiteDatabase db;
但你从来没有给它一个价值。在对其调用任何方法之前,需要对其进行初始化

编辑


如果未为某个对象指定值,则该对象为
null
,当您试图通过调用该对象上的方法(如
db.insert()
)来使用该对象时,将出现异常。关于如何初始化数据库对象。重要的是你理解它而不是我写代码。该教程应该很好地解释它。

在哪一行显示空指针异常?在helper.AddDetail(ta);长a=db.insert(“Hotel”,null,VAL);请检查一下,我不明白你在说什么,你能不能在progroam中做些改变,我是android新手,所以我不明白@codeMagicI编辑了一个链接,应该可以很好地解释DB的使用。它没有值,因此没有要插入的内容。