Android-为什么我的onClickListner导致我的应用程序崩溃?

我正在尝试将数据存储到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)

qjp1970 回答:Android-为什么我的onClickListner导致我的应用程序崩溃?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3112563.html

大家都在问