Android 将复选框值保存到数据库时获取空指针异常
我想将复选框值添加到数据库中,但它在logcat中显示错误,我已将我的值存储在变量“ta”中,并对其进行了烘焙,然后它开始工作,当我将该值插入数据库时,它显示错误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
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的使用。它没有值,因此没有要插入的内容。