【问题标题】:How to insert data in database using checkboxes?如何使用复选框在数据库中插入数据?
【发布时间】:2012-04-11 17:43:09
【问题描述】:

我正在尝试使用复选框将数据插入数据库,但我不知道如何去做。如果用户选中一个复选框并单击更新按钮,它将被插入数据库.

这是我的代码。

CXATest1Activity

public class CXATest1Activity extends Activity {
/** Called when the activity is first created. */
DBCXAAdapter db = new DBCXAAdapter(this);
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //set up main content view
    setContentView(R.layout.main);

    Button button1main = (Button) findViewById(R.id.Button01main);

    button1main.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

         db.open();

            EditText editTextName = (EditText)findViewById(R.id.EditTextName);
            String NameValue = editTextName.getText().toString();

            EditText editTextAge = (EditText)findViewById(R.id.EditTextAge);
            String AgeValue = editTextAge.getText().toString();

            EditText editTextMedicalBackgroundBody = (EditText)findViewById(R.id.EditTextMedicalBackgroundBody);
            String MedicalBackgroundBodyValue = editTextMedicalBackgroundBody.getText().toString();

            Spinner editTextSpinnerGenderType = (Spinner)findViewById(R.id.SpinnerGenderType);
            String GenderTypeValue = editTextSpinnerGenderType.getSelectedItem().toString();

            Spinner editTextSpinnerMedicalBackgroundSelectType = (Spinner)findViewById(R.id.SpinnerMedicalBackgroundSelectType);
            String MedicalBackgroundSelectTypeValue = editTextSpinnerMedicalBackgroundSelectType.getSelectedItem().toString();

            CheckBox editTextCheckboxMedicalBackgroundCancer = (CheckBox)findViewById(R.id.checkBoxCancer);
            String MedicalBackgroundCancerValue = editTextCheckboxMedicalBackgroundCancer.getText().toString();

            editTextCheckboxMedicalBackgroundCancer.setOnCheckedChangeListener(new OnCheckedChangeListener(){
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


            long id;
            id = db.insertUserprofile(NameValue, AgeValue, MedicalBackgroundBodyValue, GenderTypeValue, MedicalBackgroundSelectTypeValue, MedicalBackgroundCancerValue);

            db.close(); 


                //set up dialog
                final Dialog dialog = new Dialog(CXATest1Activity.this);
                dialog.setContentView(R.layout.maindialog);
                dialog.setTitle("Congrats");
                dialog.setCancelable(true);
                //there are a lot of settings, for dialog, check them all out!

                //set up text
                TextView text = (TextView) dialog.findViewById(R.id.TextView01);
                text.setText(R.string.lots_of_text);

                //set up image view
                ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
                img.setImageResource(R.drawable.updated_icon_new1);

                //set up button
                Button button = (Button) dialog.findViewById(R.id.Button01);
                button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {

                        dialog.dismiss();
                    }
                });
                //now that the dialog is set up, it's time to show it    
                dialog.show();
            }

DBCXA适配器

//---insert a userprofile into the database---
public long insertUserprofile(String name, String age, String medicalbackground, String spinnergender, String spinnermedicalbackground, String checkboxmedicalbackgroundcancer) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, name);
    initialValues.put(KEY_AGE, age);
    initialValues.put(KEY_MEDICALBACKGROUND, medicalbackground);
    initialValues.put(KEY_SPINNERGENDER, spinnergender);
    initialValues.put(KEY_SPINNERMEDICALBACKGROUND, spinnermedicalbackground);
    initialValues.put(KEY_CHECKBOXMEDICALBACKGROUNDCANCER, checkboxmedicalbackgroundcancer);
  return db.insert(DATABASE_TABLE, null, initialValues);
}

提前致谢。

【问题讨论】:

    标签: android sqlite checkbox


    【解决方案1】:
            id = db.insertUserprofile(NameValue, AgeValue, MedicalBackgroundBodyValue, GenderTypeValue, MedicalBackgroundSelectTypeValue, MedicalBackgroundCancerValue); all you have to do is add listener to your checkbox which listens of checkbox activity
    
    
    
    editTextCheckboxMedicalBackgroundCancer.setOnCheckedChangeListener(new OnCheckedChangeListener(){
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
             }
        });
    

    更新

    你没有在复选框监听器内做,你在监听器外调用insertUserprofile函数,该函数将始终执行。

    editTextCheckboxMedicalBackgroundCancer.setOnCheckedChangeListener(new OnCheckedChangeListener(){
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    long id;
    id = db.insertUserprofile(NameValue, AgeValue, MedicalBackgroundBodyValue, GenderTypeValue, MedicalBackgroundSelectTypeValue, MedicalBackgroundCancerValue); 
    
             }
        });
    

    【讨论】:

    • 我已经厌倦了像这样使用你的建议,但它没有用。无论我是否选中复选框,它仍然会将“癌症”值插入数据库。还有其他我应该写的代码吗?
    • 我已经按照你说的做了,但是有错误“不能在不同方法中定义的内部类中引用非最终变量 AgeValue”。另外,我认为 create() 上的 public void 导致了错误。我已经编辑了类 CXATest1Activity.java 以添加我之前没有添加的公共 void 方法。
    • 如果用户没有点击复选框,那么复选框不会将数据插入数据库。我该怎么做?
    • 我向你展示了上面的代码,只有当用户点击复选框时,插入语句才会被执行。尝试理解我提供的代码,然后根据您的需要实现,因为这只是一个示例,而不是实际实现。
    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多