Android Eclipse:将Checkbox的String Text添加到数据库中

时间:2014-08-01 20:34:12

标签: android eclipse sqlite checkbox multiple-columns

  

大家好,我有一个数据库。我可以在我的数据库中保存文本。但是如何将刚刚创建的Checkboxes保存到我的数据库中呢?

     

我在数据库中为此创建了多少个COLUMNS?只需一个或多个    列 ?

     

例如,我创建了3个复选框:

     

1.checkbox"得到牛奶"

     

2.checkbox"得到面包"

     

3.checkbox"去工作"

     

如何将文本和复选框保存到我的数据库中?谢谢你提前帮助我。 :)

这是要输入的文字的代码:

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;
import de.vogella.android.todos.contentprovider.MyTodoContentProvider;
import de.vogella.android.todos.database.TodoTable;

public class TodoDetailActivity extends Activity {
    private Spinner mCategory;
    private EditText mTitleText;
    private EditText mAuswirkungen;
    private EditText mBodyText;
    private Uri todoUri;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.todo_edit);
///////// Create new Checkbox with text in it///////////
        final EditText txtTitle = (EditText) findViewById(R.id.txtTitle);
        final Button btnCreate = (Button) findViewById(R.id.btnCreate);
        final RadioGroup radContainer = (RadioGroup) findViewById(R.id.radContainer);

        final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        btnCreate.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                String name = txtTitle.getText().toString().trim();

                if (!name.isEmpty()) {

                    CheckBox checkBox = new CheckBox(TodoDetailActivity.this);
                    checkBox.setText(name);
                    checkBox.setLayoutParams(params);

                    radContainer.addView(checkBox);

                } else {
                    Toast.makeText(TodoDetailActivity.this,
                            "Set new Checkbox", Toast.LENGTH_SHORT).show();
                }
            }
        });

        mAuswirkungen = (EditText) findViewById(R.id.auswirkungen);
        mCategory = (Spinner) findViewById(R.id.category);
        mTitleText = (EditText) findViewById(R.id.todo_edit_summary);
        mBodyText = (EditText) findViewById(R.id.todo_edit_description);
        Button confirmButton = (Button) findViewById(R.id.todo_edit_button);
        Bundle extras = getIntent().getExtras();
        // Check from the saved Instance
        todoUri = (bundle == null) ? null : (Uri) bundle
                .getParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE);
        // Or passed from the other activity
        if (extras != null) {
            todoUri = extras
                    .getParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE);
            fillData(todoUri);
        }
        confirmButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                if (TextUtils.isEmpty(mTitleText.getText().toString())) {
                    makeToast();
                } else {
                    setResult(RESULT_OK);
                    finish();
                }
            }
        });
    }

    private void fillData(Uri uri) {
        String[] projection = { TodoTable.COLUMN_SUMMARY,
                TodoTable.COLUMN_DESCRIPTION, TodoTable.COLUMN_CATEGORY,
                TodoTable.COLUMN_AUSWIRKUNGEN };
        Cursor cursor = getContentResolver().query(uri, projection, null, null,
                null);
        if (cursor != null) {
            cursor.moveToFirst();
            String category = cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_CATEGORY));
            for (int i = 0; i < mCategory.getCount(); i++) {
                String s = (String) mCategory.getItemAtPosition(i);
                if (s.equalsIgnoreCase(category)) {
                    mCategory.setSelection(i);
                }
            }
            mAuswirkungen.setText(cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_AUSWIRKUNGEN)));
            mTitleText.setText(cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_SUMMARY)));
            mBodyText.setText(cursor.getString(cursor
                    .getColumnIndexOrThrow(TodoTable.COLUMN_DESCRIPTION)));
            // Always close the cursor
            cursor.close();
        }
    }

    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        saveState();
        outState.putParcelable(MyTodoContentProvider.CONTENT_ITEM_TYPE, todoUri);
    }

    @Override
    protected void onPause() {
        super.onPause();
        saveState();
    }

    private void saveState() {
        String category = (String) mCategory.getSelectedItem();
        String summary = mTitleText.getText().toString();
        String description = mBodyText.getText().toString();
        String auswirkungen = mAuswirkungen.getText().toString();
        // Only save if either summary or description
        // is available
        if (description.length() == 0 && summary.length() == 0) {
            return;
        }
        ContentValues values = new ContentValues();
        values.put(TodoTable.COLUMN_CATEGORY, category);
        values.put(TodoTable.COLUMN_SUMMARY, summary);
        values.put(TodoTable.COLUMN_DESCRIPTION, description);
        values.put(TodoTable.COLUMN_AUSWIRKUNGEN, auswirkungen);
        if (todoUri == null) {
            // New todo
            todoUri = getContentResolver().insert(
                    MyTodoContentProvider.CONTENT_URI, values);
        } else {
            // Update todo
            getContentResolver().update(todoUri, values, null, null);
        }
    }

    private void makeToast() {
        Toast.makeText(TodoDetailActivity.this, "Please maintain a summary",
                Toast.LENGTH_LONG).show();
    }
}

这是我的数据库

import android.database.sqlite.SQLiteDatabase; import android.util.Log;

公共类TodoTable {

// Database table
public static final String TABLE_TODO = "todo";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CATEGORY = "category";
public static final String COLUMN_SUMMARY = "summary";
public static final String COLUMN_DESCRIPTION = "description";
public static final String COLUMN_AUSWIRKUNGEN = "auswirkungen";
// Database creation SQL statement
private static final String DATABASE_CREATE = "create table " + TABLE_TODO
        + "(" + COLUMN_ID + " integer primary key autoincrement, " + ""
        + COLUMN_CATEGORY + " text not null, " + COLUMN_SUMMARY
        + " text not null," + COLUMN_DESCRIPTION + " text not null, " 
        + COLUMN_AUSWIRKUNGEN + " text not null" + ");";

public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

public static void onUpgrade(SQLiteDatabase database, int oldVersion,
        int newVersion) {
    Log.w(TodoTable.class.getName(), "Upgrading database from version "
            + oldVersion + " to " + newVersion
            + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_TODO);
    onCreate(database);
}

}

2 个答案:

答案 0 :(得分:0)

我的理解是你有一张桌子&#34; todo&#34;然后你可以使用多选复选框将一个或多个值添加到&#34; todo&#34;例如牛奶检查和面包检查。

如果我的理解是正确的,那么有不同的选择:

1)数据库表更改以实现多对多关系:a)表&#34; checkbox_values&#34;包含牛奶,面包等,以及b)关系表:todo_2_checkbox_values

2)如果你知道你有一组固定的列,那么你可以在todo表中为每个复选框值创建一个列

3)添加一个文本列,并使用分隔符连接复选框值,例如牛奶#面包或面包#work。

从数据库的角度来看,第一个选项更灵活。

答案 1 :(得分:0)

很简单

  • 第1步。您可以使用checkBox.isChecked()从中获取已检查状态    复选框并将其存储在boolean本地变量中。
  • 第2步。使用SQL.RawQuery("YOUR-Query")并更新复选框的状态    进入Sqlite