افزودن و نمایش اطلاعات spinner با استفاده از SQLite در اندروید
جمعه 4 دی 1394در این مقاله می خواهیم داده هایی را ذخیره نماییم و آن ها را در یک spinner نمایش دهیم و با زدن هر کدام از آن ها اطلاعات در textbox مورد نظر نمایش داده شود و به صورت پیغام toast اطلاعات را نشان دهد البته با استفاده از دیتابیس sqlite این نمونه را مثال می زنیم.
ابتدا یک پروژه ی جدیدی ایجاد نمایید شما نیاز به یک کلاس برای تعریف پایگاه داده خود دارید به صورت زیر:
یک کلاس جدید به نام DatabaseHandler.java را می سازید دو خط زیر یک label را اضافه می نماید و تمام label های ذخیره شده را به پایگاه داده بر می گرداند به صورت زیر:
public void insertLabel(String label){} // will insert a new label into labels table public List<String> getAllLabels(){} // will returns all labels stored in database
حالا باید داخل کلاس databasehelper کد های زیر را بنویسید:
import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHandler extends SQLiteOpenHelper { // Database Version private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "spinnerExample"; // Labels table name private static final String TABLE_LABELS = "labels"; // Labels Table Columns names private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Creating Tables @Override public void onCreate(SQLiteDatabase db) { // Category table create query String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT)"; db.execSQL(CREATE_CATEGORIES_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older table if existed db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS); // Create tables again onCreate(db); } /** * Inserting new lable into lables table * */ public void insertLabel(String label){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, label); // Inserting Row db.insert(TABLE_LABELS, null, values); db.close(); // Closing database connection } /** * Getting all labels * returns list of labels * */ public List<String> getAllLabels(){ List<String> labels = new ArrayList<String>(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_LABELS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { labels.add(cursor.getString(1)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return labels; } }
در کد بالا یک دیتابیس ایجاد کرده است و جدول و فیلد های مورد نظر آن را هم قرار داده است اگر دیتابیس مورد نظر را داشتیم آن را حذف می نماییم و اگر نبود پایگاه داده مورد نظر اضافه می شود، یک متد برای افزودن اطلاعات به جدول و یک متد هم برای نمایش اطلاعات داخل یک spinner استفاده خواهد شد.
یک صفحه ی xml ایجاد نمایید و قطعه کد زیر را در activity بنویسید به صورت زیر:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- Label --> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Add New Label" android:padding="8dip" /> <!-- Input Text --> <EditText android:id="@+id/input_label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:layout_marginRight="8dip"/> <!-- Add Button --> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add Label" android:layout_marginLeft="8dip" android:layout_marginTop="8dip"/> <!-- Select Label --> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Select Label" android:padding="8dip" /> <!-- Spinner Dropdown --> <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/spinner_title" android:layout_marginTop="20dip" android:layout_marginLeft="8dip" android:layout_marginRight="8dip" /> </LinearLayout>
ما باید یک متد برای بارگذاری اطلاعات در spinner استفاده نماییم که زمانی که اطلاعات داخل پایگاه داده ما ذخیره می شود اطلاعات را داخل spinner نمایش دهد، و دوباره بعد از افزودن اطلاعات داخل spinner اطلاعات داخل spinner نمایش داده شود.
کلاس آن به صورت زیر خواهد بود:
import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; public class AndroidSpinnerFromSQLiteActivity extends Activity implements OnItemSelectedListener { // Spinner element Spinner spinner; // Add button Button btnAdd; // Input text EditText inputLabel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Spinner element spinner = (Spinner) findViewById(R.id.spinner); // add button btnAdd = (Button) findViewById(R.id.btn_add); // new label input field inputLabel = (EditText) findViewById(R.id.input_label); // Spinner click listener spinner.setOnItemSelectedListener(this); // Loading spinner data from database loadSpinnerData(); /** * Add new label button click listener * */ btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { String label = inputLabel.getText().toString(); if (label.trim().length() > 0) { // database handler DatabaseHandler db = new DatabaseHandler( getApplicationContext()); // inserting new label into database db.insertLabel(label); // making input filed text to blank inputLabel.setText(""); // Hiding the keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(inputLabel.getWindowToken(), 0); // loading spinner with newly added data loadSpinnerData(); } else { Toast.makeText(getApplicationContext(), "Please enter label name", Toast.LENGTH_SHORT).show(); } } }); } /** * Function to load the spinner data from SQLite database * */ private void loadSpinnerData() { // database handler DatabaseHandler db = new DatabaseHandler(getApplicationContext()); // Spinner Drop down elements List<String> lables = db.getAllLabels(); // Creating adapter for spinner ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, lables); // Drop down layout style - list view with radio button dataAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // attaching data adapter to spinner spinner.setAdapter(dataAdapter); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // On selecting a spinner item String label = parent.getItemAtPosition(position).toString(); // Showing selected spinner item Toast.makeText(parent.getContext(), "You selected: " + label, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }
اگر پروژه را اجرا نمایید خروجی به صورت زیر خواهد بود:
زمانی که یک مقداری اضافه کردید داخل spinner قرار می گیرد و با زدن هر کدام یک پیغام toast نمایش می دهد.
- Android
- 4k بازدید
- 3 تشکر