افزودن و نمایش اطلاعات spinner با استفاده از SQLite در اندروید

جمعه 4 دی 1394

در این مقاله می خواهیم داده هایی را ذخیره نماییم و آن ها را در یک spinner نمایش دهیم و با زدن هر کدام از آن ها اطلاعات در textbox مورد نظر نمایش داده شود و به صورت پیغام toast اطلاعات را نشان دهد البته با استفاده از دیتابیس sqlite این نمونه را مثال می زنیم.

افزودن و نمایش اطلاعات spinner با استفاده از 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 نمایش می دهد.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید