我正在尝试将数据存储到SQLite
数据库中。我创建了DatabaseHelper.java,并在我的活动中创建了将数据添加到SQLite
database
中的方法,单击该按钮即可。
这是DatabaseHelper.java代码:
package com.example.metapall;
import android.content.Contentvalues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Personal.db";
public static final String TABLE_NAME = "Personal_table";
public static final String COL1 = "ID";
public static final String COL2 = "HEIGHT";
public static final String COL3 = "WEIGHT";
public static final String COL4 = "AGE";
public static final String COL5 = "GENDER";
public static final String COL6 = "actIVITY";
//public static final String COL7 = "BMR";
//public static final String COL8 = "DTEE";
public DatabaseHelper( Context context) {
super(context,DATABASE_NAME,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createtable = "CREATE TABLE " + TABLE_NAME + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT," + "HEIGHT TEXT,WEIGHT TEXT,AGE TEXT,GENDER TEXT,actIVITY TEXT)";
db.execSQL(createtable);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean addData(String HEIGHT,String WEIGHT,String AGE,String GENDER,String actIVITY){
SQLiteDatabase db = this.getwritabledatabase();
Contentvalues contentvalues = new Contentvalues();
contentvalues.put(COL2,HEIGHT);
contentvalues.put(COL3,WEIGHT);
contentvalues.put(COL4,AGE);
contentvalues.put(COL5,GENDER);
contentvalues.put(COL6,actIVITY);
//contentvalues.put(COL7,BMR);
//contentvalues.put(COL8,DTEE);
long result = db.insert(TABLE_NAME,contentvalues);
if (result == -1){
return false;
}
else{
return true;
}
}
}
在我的主要活动中,我有以下onClicklistener
方法:
public class BMRactivity extends AppCompatactivity implements AdapterView.OnItemSelectedListener {
private EditText height;
private EditText weight;
private EditText age;
private TextView result1;
private TextView result2;
private Spinner Gspinner;
private Spinner Aspinner;
private String genderCh;
private String actvCh;
DatabaseHelper PersonalDB;
Button btnAddData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bmr);
height = (EditText) findViewById(R.id.height);
weight = (EditText) findViewById(R.id.weight);
age = (EditText) findViewById(R.id.age);
result1 = (TextView) findViewById(R.id.result1);
result2 = (TextView) findViewById(R.id.result2);
//Identify spinners view based on r.id
Gspinner = (Spinner) findViewById(R.id.spinnerGender);
Aspinner = (Spinner) findViewById(R.id.spinneractivity);
//add on item selected listerners to spinner
Gspinner.setOnItemSelectedListener(this);
Aspinner.setOnItemSelectedListener(this);
btnAddData = (Button) findViewById(R.id.btnAddData);
//Construct the adapter with simple spinner item
ArrayAdapter<CharSequence> Gendapter = ArrayAdapter.createFromResource(this,R.array.GenderChoice,android.R.layout.simple_spinner_item);
ArrayAdapter<CharSequence> actvadapter = ArrayAdapter.createFromResource(this,R.array.activities,android.R.layout.simple_spinner_item);
//Construct the spinner dropdown items
Gendapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
actvadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Set adapter to Gender spinner and activity Spinner
Gspinner.setadapter(Gendapter);
Aspinner.setadapter(actvadapter);
AddData();
}
public void AddData(){
btnAddData.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
String HEIGHT = height.getText().toString();
String WEIGHT = weight.getText().toString();
String GENDER = genderCh;
String AGE = age.getText().toString();
String actIVITY = actvCh;
boolean insertData = PersonalDB.addData(HEIGHT,WEIGHT,GENDER,AGE,actIVITY);
if (insertData == true){
Toast.makeText(BMRactivity.this,"Data Successfully Saved!",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(BMRactivity.this,"Something Went Wrong!",Toast.LENGTH_SHORT).show();
}
}
});
}
由于某种原因,当应用程序打开时,一旦我尝试打开此特定的activity
,应用程序就会关闭。如果我将public void AddData
方法删除,它不会崩溃。所以我认为我在这种方法上做错了。
知道可能是什么吗?
编辑: 我正确分配了按钮,当我执行代码时,我开始活动并且一切正常,但是现在出现此错误:
D/AndroidRuntime: Shutting down VM
E / Android运行时:致命异常:主要 流程:com.example.metapall,PID:17236 java.lang.NullPointerException:尝试调用虚拟方法'boolean com.example.metapall.DatabaseHelper.addData(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang .String)'在空对象引用上 在com.example.metapall.BMRactivity $ 1.onClick(BMRactivity.java:78) 在android.view.View.performClick(View.java:7125) 在android.view.View.performClickinternal(View.java:7102) 在android.view.View.access $ 3500(View.java:801) 在android.view.View $ PerformClick.run(View.java:27336) 在android.os.Handler.handleCallback(Handler.java:883) 在android.os.Handler.dispatchMessage(Handler.java:100) 在android.os.Looper.loop(Looper.java:214) 在android.app.activityThread.main(activityThread.java:7356) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:492) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)