📜  Android Sqlite示例(带有Spinner)(1)

📅  最后修改于: 2023-12-03 14:59:15.396000             🧑  作者: Mango

Android SQLite示例(带有Spinner)

本示例将介绍如何在Android应用中使用SQLite数据库,并结合Spinner实现数据的增删改查功能。SQLite是一种轻量级的关系型数据库管理系统,它可以被集成到Android应用中,用于存储和管理应用数据。

需求分析

在本示例中,我们需要实现以下功能:

  • 在应用中显示一个Spinner,Spinner的选项来自于SQLite数据库中的数据;
  • 用户可以添加、修改和删除Spinner中的选项;
  • 用户可以通过Spinner选项选择相应的数据。
技术选型

在本示例中,我们将使用以下技术:

  • SQLite:轻量级的关系型数据库管理系统;
  • Android Spinner:用于从下拉列表中选择一个选项的UI组件;
  • Android SQLiteDatabase:用于操作SQLite数据库的类;
  • Android Cursor:用于操作查询结果的类。
实现步骤

创建数据模型

首先,我们需要定义一个数据模型,用于表示我们的业务数据。在本示例中,我们将创建一个名为Option的简单数据模型,包含两个字段:idnameid将作为主键使用,name用于存储选项名称。

public class Option {

    private int id;
    private String name;

    public Option(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

创建数据库

接下来,我们需要创建一个SQLite数据库,用于存储和管理我们的业务数据。在本示例中,我们将创建一个名为OptionDBHelper的帮助类,用于创建数据库和更新数据库结构。我们将在其中创建一个名为options的表,包含两个字段:idnameid为自增长的整型,作为主键;name为字符串类型,用于存储选项名称。创建表的SQL语句如下:

CREATE TABLE options (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT
);

以下是OptionDBHelper类的实现:

public class OptionDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "options.db";
    private static final int DATABASE_VERSION = 1;

    private static final String CREATE_TABLE_OPTIONS = "CREATE TABLE options ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "name TEXT"
            + ");";

    public OptionDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_OPTIONS);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级操作
    }
}

实现数据的增删改查

在本示例中,我们将实现四个方法,用于实现数据的增删改查功能。这些方法将通过OptionDBHelper类中的SQLiteDatabase对象执行对数据库的操作。

  • addOption(Option option):向数据库中添加一条数据记录。该方法将接收一个Option对象,将其转换成数据库中的数据格式并插入到数据库中。
public long addOption(Option option) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", option.getName());
    return db.insert("options", null, values);
}
  • updateOption(Option option):修改数据库中已有的一条数据记录。该方法将接收一个Option对象,将其转换成数据库中的数据格式并更新数据库中相应的记录。
public int updateOption(Option option) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", option.getName());
    String[] args = { Integer.toString(option.getId()) };
    return db.update("options", values, "id=?", args);
}
  • deleteOption(int id):从数据库中删除一条数据记录。该方法将接收一个整型参数id,用于指定需要删除的记录的主键。
public int deleteOption(int id) {
    SQLiteDatabase db = getWritableDatabase();
    String[] args = { Integer.toString(id) };
    return db.delete("options", "id=?", args);
}
  • getAllOptions():从数据库中查询所有的数据记录,并将其转换成Option对象的列表返回。
public List<Option> getAllOptions() {
    SQLiteDatabase db = getReadableDatabase();
    String[] columns = { "id", "name" };
    Cursor cursor = db.query("options", columns, null, null, null, null, null);
    List<Option> options = new ArrayList<>();
    while (cursor.moveToNext()) {
        int id = cursor.getInt(cursor.getColumnIndex("id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        options.add(new Option(id, name));
    }
    cursor.close();
    return options;
}

创建UI界面

在本示例中,我们将创建一个简单的UI界面,用于展示Spinner和相关的按钮。我们将在其中用于Spinner的数据来自于数据库中的选项数据。界面中包含以下UI组件:

  • Spinner:用于在下拉列表中显示选项;
  • EditText:用于输入要添加或修改的选项名称;
  • Button:用于添加、修改和删除选项。

界面布局代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选项:"/>

    <Spinner
        android:id="@+id/options_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加/修改:"/>

    <EditText
        android:id="@+id/edittext_option_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="新选项名称"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="end">

        <Button
            android:id="@+id/button_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加"/>

        <Button
            android:id="@+id/button_update"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="修改"/>

        <Button
            android:id="@+id/button_delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除"/>

    </LinearLayout>

</LinearLayout>

绑定UI组件和事件

接下来,我们需要在Activity中绑定UI组件和事件。

  • 绑定Spinner:将Spinner与数据库中的选项数据绑定。
Spinner spinner = findViewById(R.id.options_spinner);

List<Option> options = dbHelper.getAllOptions();
OptionAdapter adapter = new OptionAdapter(this, options);
spinner.setAdapter(adapter);
  • 绑定添加按钮:将添加按钮与数据添加事件绑定。
Button addButton = findViewById(R.id.button_add);
addButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String optionName = optionNameEditText.getText().toString();
        if (optionName.isEmpty()) {
            Toast.makeText(MainActivity.this, "选项名称不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        Option option = new Option(0, optionName); // id将由数据库自动生成
        long id = dbHelper.addOption(option);
        option.setId((int) id);
        optionAdapter.add(option);
    }
});
  • 绑定修改按钮:将修改按钮与数据修改事件绑定。
Button updateButton = findViewById(R.id.button_update);
updateButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int position = spinner.getSelectedItemPosition();
        if (position < 0) {
            Toast.makeText(MainActivity.this, "请选择需要修改的选项", Toast.LENGTH_SHORT).show();
            return;
        }
        Option option = optionAdapter.getItem(position);
        String optionName = optionNameEditText.getText().toString();
        if (optionName.isEmpty()) {
            Toast.makeText(MainActivity.this, "选项名称不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        option.setName(optionName);
        int n = dbHelper.updateOption(option);
        if (n > 0) {
            optionAdapter.notifyDataSetChanged();
            Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "修改失败", Toast.LENGTH_SHORT).show();
        }
    }
});
  • 绑定删除按钮:将删除按钮与数据删除事件绑定。
Button deleteButton = findViewById(R.id.button_delete);
deleteButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int position = spinner.getSelectedItemPosition();
        if (position < 0) {
            Toast.makeText(MainActivity.this, "请选择需要删除的选项", Toast.LENGTH_SHORT).show();
            return;
        }
        Option option = optionAdapter.getItem(position);
        int n = dbHelper.deleteOption(option.getId());
        if (n > 0) {
            optionAdapter.remove(option);
            Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_SHORT).show();
        }
    }
});

显示数据

最后,在Activity的onCreate()方法中显示UI界面。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dbHelper = new OptionDBHelper(this);

    optionNameEditText = findViewById(R.id.edittext_option_name);

    Spinner spinner = findViewById(R.id.options_spinner);

    List<Option> options = dbHelper.getAllOptions();
    OptionAdapter adapter = new OptionAdapter(this, options);
    spinner.setAdapter(adapter);

    Button addButton = findViewById(R.id.button_add);
    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 添加选项
        }
    });

    Button updateButton = findViewById(R.id.button_update);
    updateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 修改选项
        }
    });

    Button deleteButton = findViewById(R.id.button_delete);
    deleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 删除选项
        }
    });
}
示例代码

完整的代码示例可以在GitHub上获得。