无涯教程-Android - SQLite Spinner

54 阅读3分钟

在此示例中,无涯教程在单击按钮时添加了一个标签,并在Spinner上显示了所有添加的标签。如您在前面的示例中所看到的,需要扩展SQLiteOpenHelper类以在sqlite上执行操作。

无涯教程在DatabaseHandler类中重写了SQLiteOpenHelper类的onCreate()和onUpgrade()方法,该方法提供了用于插入和显示标签或数据的其他方法。

Sqlite Spinner示例

让无涯教程看看简单的代码可以使用SQLite数据库在Spinner上添加和显示字符串内容。

File: activity_main.xml
<!--?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>
File: MainActivity.java
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">&amp;</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">&lt;string&gt;</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">&lt;string&gt;</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">&lt;string&gt;</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">&amp;</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">&amp;</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">

}

File: DatabaseHandler.java
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">&lt;string&gt;</span><span class="pln"> getAllLabels</span><span class="pun">(){</span><span class="pln">
    </span><span class="typ">List</span><span class="str">&lt;string&gt;</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">&lt;string&gt;</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">

}

android sqlite example output 1android sqlite example output 2android sqlite example output 3

参考链接

www.learnfk.com/android/and…