在此示例中,无涯教程在单击按钮时添加了一个标签,并在Spinner上显示了所有添加的标签。如您在前面的示例中所看到的,需要扩展SQLiteOpenHelper类以在sqlite上执行操作。
无涯教程在DatabaseHandler类中重写了SQLiteOpenHelper类的onCreate()和onUpgrade()方法,该方法提供了用于插入和显示标签或数据的其他方法。
Sqlite Spinner示例
让无涯教程看看简单的代码可以使用SQLite数据库在Spinner上添加和显示字符串内容。
<!--?xml version="1.0" encoding="utf-8"?--> <relativelayout 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" tools:context="example.learnfk.com.sqlitespinner.MainActivity"> <edittext android:id="@+id/input_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_centerhorizontal="true" android:layout_margintop="46dp" android:hint="Add item" android:ems="10"></edittext> <button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/input_label" android:layout_centerhorizontal="true" android:layout_margintop="67dp" android:text="Add item"></button> <spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparentstart="true" android:layout_below="@+id/btn_add" android:layout_margintop="70dp"></spinner> </relativelayout>
package example.learnfk.com.sqlitespinner;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
Spinner spinner;
Button btnAdd;
EditText inputLabel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinner);
btnAdd = findViewById(R.id.btn_add);
inputLabel = findViewById(R.id.input_label);
spinner</span><span class="pun">.</span><span class="pln">setOnItemSelectedListener</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">);</span><span class="pln">
</span><span class="com">//从数据库加载spinner数据</span><span class="pln">
loadSpinnerData</span><span class="pun">();</span><span class="pln">
btnAdd</span><span class="pun">.</span><span class="pln">setOnClickListener</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">View</span><span class="pun">.</span><span class="typ">OnClickListener</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onClick</span><span class="pun">(</span><span class="typ">View</span><span class="pln"> arg0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> inputLabel</span><span class="pun">.</span><span class="pln">getText</span><span class="pun">().</span><span class="pln">toString</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">label</span><span class="pun">.</span><span class="pln">trim</span><span class="pun">().</span><span class="pln">length</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&</span><span class="pln">gt</span><span class="pun">;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">DatabaseHandler</span><span class="pln"> db </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DatabaseHandler</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">());</span><span class="pln">
db</span><span class="pun">.</span><span class="pln">insertLabel</span><span class="pun">(</span><span class="pln">label</span><span class="pun">);</span><span class="pln">
</span><span class="com">//将输入字段文本设为空白</span><span class="pln">
inputLabel</span><span class="pun">.</span><span class="pln">setText</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
</span><span class="com">//隐藏键盘</span><span class="pln">
</span><span class="typ">InputMethodManager</span><span class="pln"> imm </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">InputMethodManager</span><span class="pun">)</span><span class="pln">
getSystemService</span><span class="pun">(</span><span class="typ">Context</span><span class="pun">.</span><span class="pln">INPUT_METHOD_SERVICE</span><span class="pun">);</span><span class="pln">
imm</span><span class="pun">.</span><span class="pln">hideSoftInputFromWindow</span><span class="pun">(</span><span class="pln">inputLabel</span><span class="pun">.</span><span class="pln">getWindowToken</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="com">//使用新添加的数据加载Spinner</span><span class="pln">
loadSpinnerData</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="pln"> </span><span class="str">"Please enter label name"</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_SHORT</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">/**
* 从 SQLite 数据库加载Spinner数据的函数
* */</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> loadSpinnerData</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">DatabaseHandler</span><span class="pln"> db </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DatabaseHandler</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">());</span><span class="pln">
</span><span class="typ">List</span><span class="str"><string></span><span class="pln"> labels </span><span class="pun">=</span><span class="pln"> db</span><span class="pun">.</span><span class="pln">getAllLabels</span><span class="pun">();</span><span class="pln">
</span><span class="com">//创建适配器</span><span class="pln">
</span><span class="typ">ArrayAdapter</span><span class="str"><string></span><span class="pln"> dataAdapter </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ArrayAdapter</span><span class="str"><string></span><span class="pun">(</span><span class="kwd">this</span><span class="pun">,</span><span class="pln">android</span><span class="pun">.</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">simple_spinner_item</span><span class="pun">,</span><span class="pln"> labels</span><span class="pun">);</span><span class="pln">
</span><span class="com">//下拉布局样式 - 带有单选按钮的列表视图</span><span class="pln">
dataAdapter</span><span class="pun">.</span><span class="pln">setDropDownViewResource</span><span class="pun">(</span><span class="pln">android</span><span class="pun">.</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">simple_spinner_dropdown_item</span><span class="pun">);</span><span class="pln">
</span><span class="com">//将数据适配器附加到Spinner</span><span class="pln">
spinner</span><span class="pun">.</span><span class="pln">setAdapter</span><span class="pun">(</span><span class="pln">dataAdapter</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onItemSelected</span><span class="pun">(</span><span class="typ">AdapterView</span><span class="pun">&</span><span class="pln">gt</span><span class="pun">;</span><span class="pln"> parent</span><span class="pun">,</span><span class="pln"> </span><span class="typ">View</span><span class="pln"> view</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> position</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">long</span><span class="pln"> id</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">//在选择Spinner项目时</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> label </span><span class="pun">=</span><span class="pln"> parent</span><span class="pun">.</span><span class="pln">getItemAtPosition</span><span class="pun">(</span><span class="pln">position</span><span class="pun">).</span><span class="pln">toString</span><span class="pun">();</span><span class="pln">
</span><span class="com">//显示选定的Spinner项目</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">parent</span><span class="pun">.</span><span class="pln">getContext</span><span class="pun">(),</span><span class="pln"> </span><span class="str">"You selected: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> label</span><span class="pun">,</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onNothingSelected</span><span class="pun">(</span><span class="typ">AdapterView</span><span class="pun">&</span><span class="pln">gt</span><span class="pun">;</span><span class="pln"> arg0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">//TODO Auto-generated method stub</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
package example.learnfk.com.sqlitespinner;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "spinnerExample";
private static final String TABLE_NAME = "labels";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">DatabaseHandler</span><span class="pun">(</span><span class="typ">Context</span><span class="pln"> context</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">(</span><span class="pln">context</span><span class="pun">,</span><span class="pln"> DATABASE_NAME</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> DATABASE_VERSION</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
//创建表
@Override
public void onCreate(SQLiteDatabase db) {
//类别表创建查询
String CREATE_ITEM_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT)";
db.execSQL(CREATE_ITEM_TABLE);
}
//升级数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//删除旧表(如果存在)
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
</span><span class="com">//再次创建表</span><span class="pln">
onCreate</span><span class="pun">(</span><span class="pln">db</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">/**
* 将新标签插入标签表
* */</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> insertLabel</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> label</span><span class="pun">){</span><span class="pln">
</span><span class="typ">SQLiteDatabase</span><span class="pln"> db </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">getWritableDatabase</span><span class="pun">();</span><span class="pln">
</span><span class="typ">ContentValues</span><span class="pln"> values </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ContentValues</span><span class="pun">();</span><span class="pln">
values</span><span class="pun">.</span><span class="pln">put</span><span class="pun">(</span><span class="pln">COLUMN_NAME</span><span class="pun">,</span><span class="pln"> label</span><span class="pun">);</span><span class="com">//列名,列值</span><span class="pln">
</span><span class="com">//插入行</span><span class="pln">
db</span><span class="pun">.</span><span class="pln">insert</span><span class="pun">(</span><span class="pln">TABLE_NAME</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> values</span><span class="pun">);</span><span class="com">//表名,nullColumnHack,CotentValues</span><span class="pln">
db</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="com">//关闭数据库连接</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">/**
* 获取所有标签
* 返回标签列表
* */</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">List</span><span class="str"><string></span><span class="pln"> getAllLabels</span><span class="pun">(){</span><span class="pln">
</span><span class="typ">List</span><span class="str"><string></span><span class="pln"> list </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ArrayList</span><span class="str"><string></span><span class="pun">();</span><span class="pln">
</span><span class="com">//全选查询</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> selectQuery </span><span class="pun">=</span><span class="pln"> </span><span class="str">"SELECT * FROM "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> TABLE_NAME</span><span class="pun">;</span><span class="pln">
</span><span class="typ">SQLiteDatabase</span><span class="pln"> db </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">getReadableDatabase</span><span class="pun">();</span><span class="pln">
</span><span class="typ">Cursor</span><span class="pln"> cursor </span><span class="pun">=</span><span class="pln"> db</span><span class="pun">.</span><span class="pln">rawQuery</span><span class="pun">(</span><span class="pln">selectQuery</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">);</span><span class="com">//selectQuery,selectedArguments</span><span class="pln">
</span><span class="com">//循环遍历所有行并添加到列表</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">cursor</span><span class="pun">.</span><span class="pln">moveToFirst</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">do</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
list</span><span class="pun">.</span><span class="kwd">add</span><span class="pun">(</span><span class="pln">cursor</span><span class="pun">.</span><span class="pln">getString</span><span class="pun">(</span><span class="lit">1</span><span class="pun">));</span><span class="com">//添加第二列数据</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">cursor</span><span class="pun">.</span><span class="pln">moveToNext</span><span class="pun">());</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//关闭连接</span><span class="pln">
cursor</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">
db</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">
</span><span class="com">//返回标签</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> list</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}

