آموزش Sqlite و نمایش آن در GridView در برنامه نویسی اندروید
سلام دوستان عزیز امیدوارم حالتون خوب باشه در این سری از آموزش برنامه نویسی اندروید به آموزش Sqlite و نمایش آن در GridView در برنامه نویسی اندروید می پردازیم قبلتر آموزش Sqlite را برای شما عزیزان قرار داده بودیم بهتر است ابتدا آن آموزش را مطالعه کرده تا نحوه استفاده از Sqlite را به درستی درک کنید ما در اینجا دیگر Sqlite را توضیح نخواهیم داد و بیشتر بروی نحوه قرار دادن آن در GridView می پردازیم.
خب ابتدا فایل layout خود را باز کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <EditText android:id="@+id/et_empcode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <GridView android:id="@+id/gv_emp" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:horizontalSpacing="4dp" android:verticalSpacing="4dp" android:layout_below="@+id/et_empcode" > </GridView> </RelativeLayout> |
شامل یک editText و یک GridView است
حالا باید یک فایل xml درست کنیم تا آیتم های هر خونه از GridView را بسازد پس در فولدر layout یک فایل به نام layout_grid_item.xml ایجاد کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?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:background="#ff00ff" android:orientation="vertical" > <TextView android:id="@+id/tv_emp_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ID" /> <TextView android:id="@+id/tv_emp_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="name" /> <TextView android:id="@+id/tv_emp_email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Email" /> <TextView android:id="@+id/tv_emp_address" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Address" /> </LinearLayout> |
همانطور که در بالا می بینید چهار textview یا چهار آیتم داریم که داده ها در آن قرار می گیرد شامل آیدی , نام , ایمیل و آدرس می شود.
حالا مثل هیمشه باید یک آداپتور درست کنیم که getter و setter باشد یعنی دیتا های مارو دریافت کند و در textview ها که آیتمی از GridView هستند قرار دهند. نام آداپتور را برابر با MyAdapter.java قرار دهید و کد های زیر را در آن قرار داده.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public class MyAdapter extends BaseAdapter { Context context; ArrayList<Employee> empList; private static LayoutInflater inflater = null; public MyAdapter(Context context, ArrayList<Employee> empList) { this.context = context; this.empList = empList; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return empList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if (convertView == null) convertView = inflater.inflate(R.layout.layout_grid_item, null); TextView codeTextView = (TextView) convertView.findViewById(R.id.tv_emp_id); TextView nameTextView = (TextView) convertView.findViewById(R.id.tv_emp_name); TextView emailTextView = (TextView) convertView.findViewById(R.id.tv_emp_email); TextView addressTextView = (TextView) convertView.findViewById(R.id.tv_emp_address); Employee e = new Employee(); e = empList.get(position); codeTextView.setText("Code: " + String.valueOf(e.getCode())); nameTextView.setText("Name: " + e.getName()); emailTextView.setText("Email: " + e.getEmail()); addressTextView.setText("Address: " + e.getAddress()); return convertView; } } |
البته دقت کنید ما باید یک کلاس دیگر که model معروف است درست کنیم این کلاس کار اصلی getter و setter را انجام می دهند یعنی داده را از DatabseHelper تحویل می گیرند به اداپتور می دهند.
نام کلاس را برابر با Employee.java بگذارید و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | int code; String name, email, address; /* Setters */ public void setCode(int code) { this.code = code; } public void setName(String name) { this.name = name; } public void setEmail(String email) { this.email = email; } public void setAddress(String address) { this.address = address; } /* Getters */ public int getCode() { return this.code; } public String getName() { return this.name; } public String getEmail() { return this.email; } public String getAddress() { return this.address; } } |
حالا باید DatabaseHelper.java را ایجاد کنیم قبلا این را به صورت کامل و جامع توضیح داده ایم و می توانید با جستجو در سایت آن را پیدا کنید ولی در کل این کلاس کارهایی مثل درج (Insert) , حذف (Delete) , آپدیت را انجام میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | public class DatabaseHelper extends SQLiteOpenHelper { private String TAG = this.getClass().getSimpleName(); private static final String DATABASE_NAME = "emp_db"; private static final int DATABASE_VERSION = 1; // TABLE NAMES private static final String TABLE_EMP = "employee"; /* Keys for Table Employee */ private static final String KEY_CODE = "code"; private static final String KEY_NAME = "name"; private static final String KEY_EMAIL = "email"; private static final String KEY_ADDRESS = "address"; String CREATE_TABLE_CALL = "CREATE TABLE " + TABLE_EMP + "(" + KEY_CODE + " INTEGER," + KEY_NAME + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + ")"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.v(TAG, "CREATE TABLE CALL: " + CREATE_TABLE_CALL); db.execSQL(CREATE_TABLE_CALL); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS " + TABLE_EMP); onCreate(db); } /* Method to create a Employee */ public long createEmployee(Employee emp) { long c; SQLiteDatabase database = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_CODE, emp.getCode()); values.put(KEY_NAME, emp.getName()); values.put(KEY_EMAIL, emp.getEmail()); values.put(KEY_ADDRESS, emp.getAddress()); c = database.insert(TABLE_EMP, null, values); database.close(); return c; } /* Method for fetching record from Database */ public ArrayList<Employee> getAllEmployee() { String query = "SELECT * FROM " + TABLE_EMP; ArrayList<Employee> employees = new ArrayList<Employee>(); SQLiteDatabase database = getReadableDatabase(); Cursor c = database.rawQuery(query, null); if (c != null) { while (c.moveToNext()) { int code = c.getInt(c.getColumnIndex(KEY_CODE)); String name = c.getString(c.getColumnIndex(KEY_NAME)); String email = c.getString(c.getColumnIndex(KEY_EMAIL)); String address = c.getString(c.getColumnIndex(KEY_ADDRESS)); Employee emp = new Employee(); emp.setCode(code); emp.setName(name); emp.setEmail(email); emp.setAddress(address); Log.v("DBHelper: ", "Name: " + name); Log.v("DBHelper: ", "Code: " + code); Log.v("DBHelper: ", "Email: " + email); Log.v("DBHelper: ", "Address: " + address); employees.add(emp); } } return employees; } /* This method is used to get a single record from Database. I have given an example, you have to do something like this. */ public Employee getEmployeeByCode(int code) { String query = "SELECT * FROM " + TABLE_EMP+ " WHERE "+ KEY_CODE + " = " +code; Employee emp = new Employee(); SQLiteDatabase database = getReadableDatabase(); Cursor c = database.rawQuery(query, null); if (c.getCount() > 0) { c.moveToFirst(); int code = c.getInt(c.getColumnIndex(KEY_CODE)); String name = c.getString(c.getColumnIndex(KEY_NAME)); String email = c.getString(c.getColumnIndex(KEY_EMAIL)); String address = c.getString(c.getColumnIndex(KEY_ADDRESS)); emp.setCode(code); emp.setName(name); emp.setEmail(email); emp.setAddress(address); Log.v("DBHelper: ", "Name: " + name); Log.v("DBHelper: ", "Code: " + code); Log.v("DBHelper: ", "Email: " + email); Log.v("DBHelper: ", "Address: " + address); } return emp; } |
و در آخر کد مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class MainActivity extends Activity { GridView gridView; ArrayList<Employee> employeeList; MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView) findViewById(R.id.gv_emp); DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this); employeeList = new ArrayList<Employee>(); employeeList = databaseHelper.getAllEmployee(); adapter = new MyAdapter(MainActivity.this, employeeList); gridView.setAdapter(adapter); } } |
و تمام اپلیکیشن را اجرا کرده و آن را تست کنید.
این آموزش هم به پایان رسید.
موفق باشید.
سلام و عرض خسته نباشید
فقط متد () createEmployee را کجا باید فراخوانی کنیم.