آموزش دیتابیس Sqlite و نمایش آن در ListView
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش دیتابیس Sqlite و نمایش آن در ListView در برنامه نویسی اندروید می پردازیم قبلتر آموزش های مربوط به Sqlite و ListView را به طور جداگانه برای شما قرار داده بودیم ولی دوستان نمی توانستند ارتباط بین دیتابیس Sqlite و listView را برقرار کنند در این پست با استفاده از یک آداپتور سفارشی داده ها را پس گرفتن از دیتابیس در ListView قرار خواهیم داد با ما همراه باشید.
ابتدا در layout خودتان که در اینجا نام آن برابر با activity_main.xml است کد های زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ListView android:id="@+id/simpleListView" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </RelativeLayout> |
در بالا یک ListView در layout خودمان قرار داده ایم تا داده های درون دیتابیس Sqlite را نمایش دهیم.
باید یک فایل جاوا به نام DatabaseHelper.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 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 | package ir.programchi; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabaseLockedException; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; /** * Created by Jfp on 1/24/2017. */ public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "programchi.db"; public static final String CARS_TABLE_NAME = "CarNumber"; public static final String CARS_COLUMN_ID = "id"; public static final String CARS_COLUMN_NAME = "c_number"; public static final String CARS_COLUMN_COLOR = "c_Color"; public static final String CARS_COLUMN_PLACE = "c_Place"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + CARS_TABLE_NAME+ "(_id integer primary key AUTOINCREMENT NOT NULL,"+ CARS_COLUMN_NAME+ " Text,"+ CARS_COLUMN_COLOR+ " Text,"+ CARS_COLUMN_PLACE+ " Text)" ); } @Override public void onUpgrade(SQLiteDatabase db, int i, int i1) { db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_NAME); onCreate(db); } public boolean insertPlate(int number, String color, String place) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("c_number", number); contentValues.put("c_Color", color); contentValues.put("c_Place", place); db.insert(CARS_TABLE_NAME, null, contentValues); return true; } public ArrayList<Cars> getData() { SQLiteDatabase db = this.getReadableDatabase(); ArrayList<Cars> car= new ArrayList<Cars>(); Cursor result = db.rawQuery("select * from "+CARS_TABLE_NAME , null); while(result.moveToNext()){ car.add( new Cars(result.getString(result.getColumnIndex(CARS_COLUMN_COLOR)) ,result.getString(result.getColumnIndex(CARS_COLUMN_NAME)) ,result.getString(result.getColumnIndex(CARS_COLUMN_PLACE)))); } return car; } public boolean updatePlates(int id, int number, int color, int place) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("c_number", number); contentValues.put("c_Color", color); contentValues.put("c_Place", place); db.update(CARS_TABLE_NAME, contentValues, "id = ? ", new String[]{Integer.toString(id)}); return true; } public Integer deletePlates(Integer id) { SQLiteDatabase db = this.getWritableDatabase(); return db.delete(CARS_TABLE_NAME, "id = ? ", new String[]{Integer.toString(id)}); } public void insertSomeCars() { insertPlate(1,"Blue","Honda Civic"); insertPlate(2,"Brown","Rolls Royce"); insertPlate(3,"Blue","Honda Civic"); insertPlate(4,"Black","Nissan Patrol <3"); insertPlate(5,"Yellow","Tiida"); insertPlate(6,"Grey","Rolls Royce"); } } |
کار اصلی را این کلاس انجام میدهد کارهای از جمله ساختن دیتابیس و در کل structure کار اصلی دیتابیس و همینطور insert کردن و بررسی بعضی از شرایط. قبلا آموزش Sqlite را در سایت قرار داده ایم در صورتی که مبتدی هستید وازه Sqlite را در سایت جستجو کنید.
حالا باید یک کلاس درست کنیم که عملیات get و set را برای هر ستون از دیتابیس انجام دهد در اینجا ما یک کلاس ساده به نام Cars.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 | package ir.programchi; /** * Created by JFP on 1/24/2017. */ public class Cars { String name; String color; String place; public Cars(String color, String name, String place) { this.color = color; this.name = name; this.place = place; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPlace() { return place; } public void setPlace(String place) { this.place = place; } } |
این کلاس به getter و setter نیز معروف هست.
قبل از اینکه آداپتور را ایجاد کنیم یک فایل به نام car_details.xml ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/carName" /> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/carColor" /> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/carPlace" /> </LinearLayout> |
برای اینکه داریم از آداپتور سفارشی استفاده می کنیم پس نیاز است آیتم های ListView را نیز خودمان ایجاد کنیم و باعث میشه بیشتر بروی آیتم ها منظورم شکل ظاهری آنها کنترل داشته باشیم.
حالا زمان ایجاد آداپتور سفارشی ما برای قرار دادن آیتم ها در ListView است. نام آداپتور ما برابر با MyCustomAdapter.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 43 44 45 46 47 48 49 50 | package ir.programchi; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.ArrayList; /** * Created by JFP on 1/24/2017. */ public class MyCustomAdapter extends ArrayAdapter{ private Context context; private ArrayList<Cars> car; public MyCustomAdapter(Context context, int textViewResourceId, ArrayList objects) { super(context,textViewResourceId, objects); this.context= context; car=objects; } private class ViewHolder { TextView carName; TextView carColor; TextView carPlace; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if (convertView == null) { LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = vi.inflate(R.layout.car_details, null); holder = new ViewHolder(); holder.carColor = (TextView) convertView.findViewById(R.id.carColor); holder.carName = (TextView) convertView.findViewById(R.id.carName); holder.carPlace=(TextView)convertView.findViewById(R.id.carPlace); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Cars individualCar= car.get(position); holder.carPlace.setText("Car Place: " + individualCar.getPlace() + ""); holder.carName.setText("Car Name: "+ individualCar.getName()+""); holder.carColor.setText("Car Color: "+individualCar.getColor()); return convertView; } } |
با استفاده از کد بالا داده ها در ListView قرار خواهند گرفته ولی هنوز فراخوانی نشده اند.
و در آخر کد مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package ir.programchi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { MyCustomAdapter myCustomAdapter=null; ListView listView=null; DatabaseHelper db=null; ArrayList<Cars> cars=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db= new DatabaseHelper(this); cars=db.getData(); myCustomAdapter= new MyCustomAdapter(this,R.layout.car_details,cars); listView = (ListView) findViewById(R.id.simpleListView); listView.setAdapter(myCustomAdapter); } } |
و در اینجا داده ها در listView قرار می گیرد.
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
من یک دیتابیس دارم که خودم با استفاده از sqlite manager ایجاد کردم و نوشتم حالا میخوام این دیتابیس رو در پروژه قرار بدم و در لیست ویو نمایش بدم ینی لیست ویو اطلاعاتش رو از دیتابیس خارجی بخونه
نمیخوام کد ها داخل پروژه نوشته بشه و جدول ایجاد بشه چون قبلا این کارها رو انجام دادم داخل sqlite manager
لطفا اگر ممکنه اموزشی راجع به این هم بذارید که دیتابیسی رو که از قبل اماده کردیم چطور در لیست ویو نمایش بدیم
خیلی متشکرم ازتون
ببخشید هرچی که نوشتم اینجا وقتی ارسال شد جملاتش بهم ریخت
اگر ممکنه و مقدوره ایدی تلگرامتون رو بدین اونجا سوالم رو مطرح کنم
با تشکر از سایت خوبتون?
سلام نظر قبلی شما مشکلی نداشت کش مرورگر را پاک کنید
@bbong9811
سلام
۲ تا سوال دارم اگر جواب بدید ممنون میشم.
سوال اول:
دیتابیس من دوتا ستون name و family داره که چند ردیف اسم و فامیلی توش ریختم.
حالا میخوام به جای اینکه اسم در کنار فامیلی در لیست ویو قرار بگیره، روی هم باشن و یه جورایی لیست ویو رو شخصی سازی کنم.
یعنی:
در ردیف اول:اسم ۱ روی فامیلی ۱
در ددیف دوم: اسم ۲ روی فامیلی ۲
در ردیف سوم: اسم ۳ روی فامیلی ۳
چطور باید اینکار رو بکنم؟
سوال دوم:
با استفاده از این نوع لیست ویو میتونم لیست علاقه مندی برای هر ردیف از لیست ویو بسازم؟
ینی کنار هر ردیف مثلا یه عکس ستاره بزارم که با کلیک روش اون ردیف از دیتابیس تو لیست علاقه مندی ها سیو بشه؟
ممنون میشم راهنماییم کنید.
سلام میشه فایل دیتابیس این پروژه رو هم قرار بدید.ممنون میشم