我不能使用boolean作为Integer

时间:2018-05-29 20:41:32

标签: java android database sqlite sql-insert

为什么它不起作用?我的数据库有问题。 boolean如何用作int? 也许我写了错误的代码。我使用boolean作为Integer对吗?如何在数据库中插入。如何将复选框中的值boolean保存到数据库中?

我的Android数据库代码

public class DataBase extends SQLiteOpenHelper{
    public static final String DATABASE_NAME = "DataOfSchedule.db";
    public static final String TABLE_NAME = "DataOfSchedule_table";
    public static final String COL_ID = "ID";
    public static final String COL_NAME = "NAME";
    public static final String COL_AGE = "AGE";
    public static final String COL_GENDER_M = "GENDER_M";
    public static final String COL_GENDER_F = "GENDER_F";
    public static final String COL_WEIGHT = "WEIGHT";
    public static final String COL_HEIGHT = "HEIGHT";
    public static final String COL_TRAUMA = "TRAUMA";
    public DataBase(Context context){
        super(context, DATABASE_NAME, null,1);
    }
    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL("CREATE TABLE" + TABLE_NAME +
                COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COL_NAME + " TEXT," +
                COL_AGE + " INTEGER NOT NULL DEFAULT 0, " +
                COL_GENDER_M + " INTEGER NOT NULL DEFAULT 0, " +
                COL_GENDER_F + " INTEGER NOT NULL DEFAULT 0, " +
                COL_TRAUMA + " INTEGER NOT NULL DEFAULT 0, " +
                COL_WEIGHT + " INTEGER NOT NULL DEFAULT 0, " +
                COL_HEIGHT + " INTEGER NOT NULL DEFAULT 0);");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
    }
    //  public boolean insertData(String name, Integer age, Integer sex_male, Integer sex_female, Integer weight, Integer height, Integer trauma){
    //    SQLiteDatabase db = this.getWritableDatabase();
    //    ContentValues contentValues = new ContentValues();
        public boolean insertData(String name, Integer age, Integer gender_m, Integer gender_f, Integer weight, Integer height, Integer trauma){
            boolean success = false;
            try{
                SQLiteDatabase db = this.getWritableDatabase();
                ContentValues contentValues = new ContentValues();
                contentValues.put(COL_NAME, name);
                contentValues.put(COL_AGE, age);
                contentValues.put(COL_GENDER_M, gender_m);
                contentValues.put(COL_GENDER_F, gender_f);
                contentValues.put(COL_WEIGHT, weight);
                contentValues.put(COL_HEIGHT, height);
                contentValues.put(COL_TRAUMA, trauma);
                long result = db.insert(TABLE_NAME,null,contentValues);
                db.close();

                if(result != -1) success = true;
            }
            catch(Exception ex){

            }

            return success;
        }

    public Cursor getALLData(){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery("Select * from "+ TABLE_NAME,null);
        return res;
    }
}

我的main_activity

public class InsertData extends AppCompatActivity {
    DataBase myDb;
    EditText txtName, txtAge , txtWeight, txtHeight;
    CheckBox boxGender_m,boxGender_f,boxTrauma;
    Button btnClick;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insert_data);
        myDb = new DataBase(this);
        txtName = (EditText) findViewById(R.id.name);
        txtAge = (EditText) findViewById(R.id.age);
        boxGender_m = (CheckBox) findViewById(R.id.gender_m);
        boxGender_f = (CheckBox) findViewById(R.id.gender_f);
        boxTrauma = (CheckBox) findViewById(R.id.trauma);
        txtWeight = (EditText) findViewById(R.id.weight);
        txtHeight = (EditText) findViewById(R.id.height);
        btnClick = (Button) findViewById(R.id.InsertBtn);
        btnClick.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                ClickMe();
            }
        });
    }

    private void ClickMe(){
        String name = txtName.getText().toString();
        String age = txtAge.getText().toString();
        String gender_m = boxGender_m.getText().toString();
        String gender_f = boxGender_f.getText().toString();
        String trauma = boxTrauma.getText().toString();
        String weight = txtName.getText().toString();
        String height = txtName.getText().toString();
        int gender_int_m = Integer.parseInt(gender_m);
        int gender_int_f = Integer.parseInt(gender_f);
        int trauma_int = Integer.parseInt(trauma);
        int weight_int = Integer.parseInt(weight);
        int age_int = Integer.parseInt(age);
        int height_int = Integer.parseInt(height);
        Boolean result = myDb.insertData( name, age_int, gender_int_m, gender_int_f, weight_int, height_int, trauma_int);
        if (result == true){
            Toast.makeText(this, "Data Inserted Successfully",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(this, "Data Inserted Failed",Toast.LENGTH_SHORT).show();
        }
        Intent i = new Intent(this,ResultData.class);
        startActivity(i);
    }

}

怎么回事?我的XML

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context="daniel_nikulshyn_and_andrew_rybka.myway.InsertData">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">
    <TextView
        android:id="@+id/heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/insert_heading"
        android:layout_gravity="center"
        android:textSize="16dp"
        android:textColor="#021aee"/>

    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/insert_name"/>
    <EditText
        android:id="@+id/age"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/insert_age"
        android:numeric="integer"/>
    <EditText
        android:id="@+id/weight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/insert_weight"
        android:numeric="integer"/>
    <EditText
        android:id="@+id/height"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/insert_height"
        android:numeric="integer"/>

    <TextView
        android:padding="10dp"
        android:text="@string/insert_gender"
        android:layout_gravity="left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <CheckBox
        android:id="@+id/gender_m"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/male"/>
    <CheckBox
        android:id="@+id/gender_f"
        android:text="@string/female"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:padding="10dp"
        android:text="@string/insert_trauma"
        android:layout_gravity="left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <CheckBox
        android:id="@+id/trauma"
        android:text="@string/insert_trauma_subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"/>

    <Button
        android:id="@+id/InsertBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:text="@string/insert_button"
        android:textColor="#f2fde4"
        android:layout_gravity="center"/>
</LinearLayout>

</ScrollView>

怎么回事?当我点击带有ID InsertBtn

的btn“Okay”时,应用程序正在关闭

2 个答案:

答案 0 :(得分:1)

您正在设置这些:

 int gender_int_m = Integer.parseInt(gender_m);
 int gender_int_f = Integer.parseInt(gender_f);
 int trauma_int = Integer.parseInt(trauma);
 int weight_int = Integer.parseInt(weight);
 int age_int = Integer.parseInt(age);
 int height_int = Integer.parseInt(height);

...作为原始int,但方法insertDataInteger对象作为参数:

public boolean insertData(String name, Integer age, Integer gender_m, Integer gender_f, 
                          Integer weight, Integer height, Integer trauma){...

在Java中,intInteger不是一回事。我建议你 更新insertData以将原始int作为参数:

public boolean insertData(String name, int age, int gender_m, int gender_f, 
                          int weight, int height, int trauma){...

答案 1 :(得分:1)

简而言之,您应该使用isChecked方法来判断是否选中了复选框,这将是一个布尔值。

我不确定getText()究竟会返回什么,但它很可能不是一个可以解析为int的字符串,所以当尝试解析时你会得到一个异常。 一个比喻就是说你付给我$ rumplestiltskin。你能给我多少钱?

因此,您的代码可以是: -

private void ClickMe(){


    String name = txtName.getText().toString();
    String age = txtAge.getText().toString();
    //String gender_m = boxGender_m.getText().toString(); //<<<< WRONG
    //String gender_f = boxGender_f.getText().toString(); //<<<< WRONG
    String trauma = boxTrauma.getText().toString();
    String weight = txtName.getText().toString();
    String height = txtName.getText().toString();
    //<<<<<<<<<< ADDED CODE >>>>>>>>>>
    int gender_int_m = 0;
    if (boxGender_m.isChecked()) {
        gender_int_m = 1;
    }
    int gender_int_f = 0;
    if (boxGender_f.isChecked()) {
        gender_int_f = 1;
    }
    //int gender_int_m = Integer.parseInt(gender_m); //<<<< REDUNDANT
    //int gender_int_f = Integer.parseInt(gender_f); //<<<< REDUNDANT
    int trauma_int = Integer.parseInt(trauma);
    int weight_int = Integer.parseInt(weight);
    int age_int = Integer.parseInt(age);
    int height_int = Integer.parseInt(height);
    Boolean result = myDb.insertData( name, age_int, gender_int_m, gender_int_f, weight_int, height_int, trauma_int);
    if (result == true){
        Toast.makeText(this, "Data Inserted Successfully",Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "Data Inserted Failed",Toast.LENGTH_SHORT).show();
    }
    Intent i = new Intent(this,ResultData.class);
    startActivity(i);
}}