Отображение данных SQLite в RecyclerView
Я много ищу, но я не нашел никаких пошаговых руководств о том, как отображать данные SQLite в RecyclerView. Может кто-нибудь объяснить мне, как я могу это сделать?
мой DataBaseAdapter:
public class DataBaseAdapter {
DataBaseHelper helper;
public DataBaseAdapter(Context context) {
helper = new DataBaseHelper(context);
}
public long insertData(String name, String card, String code) {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DataBaseHelper.NAME, name);
contentValues.put(DataBaseHelper.CARD, card);
contentValues.put(DataBaseHelper.CODE, code);
long id = db.insert(DataBaseHelper.TABLE_NAME, null, contentValues);
return id;
}
public String getData(String name){
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME+" = '"+name+"'", null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
buffer.append(name + " " + card + " " + code + "n");
}
return buffer.toString();
}
public String getAllData() {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getWritableDatabase();
String[] columns = {DataBaseHelper.UID, DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, null, null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index1 = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int cid = cursor.getInt(index1);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
buffer.append(cid + " " + name + " " + card + " " + code + "n");
}
return buffer.toString();
}
static class DataBaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "cardsdatabase";
private static final String TABLE_NAME = "CARDSTABLE";
private static final String UID = "_id";
private static final String NAME = "Name";
private static final String CARD = "Card";
private static final String CODE = "Code";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_TABLE = "create table "
+ TABLE_NAME + " (" + UID
+ " integer primary key autoincrement, " + NAME
+ " text not null, " + CARD + " ext not null, " + CODE
+ " text not null);";
private static final String DROP_TABLE = "DROP TABLE IF EXISTS "
+ TABLE_NAME;
private Context context;
public DataBaseHelper(Context context) {
super(context, DataBaseHelper.DATABASE_NAME, null, DataBaseHelper.DATABASE_VERSION);
this.context = context;
Toast toast = Toast.makeText(context, "constructor called", Toast.LENGTH_LONG);
toast.show();
}
@Override
public void onCreate(SQLiteDatabase db) {
//CREATE TABLE CARDSTABLE(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(255));
try {
db.execSQL(CREATE_TABLE);
Toast toast = Toast.makeText(context, "onCreate called", Toast.LENGTH_LONG);
toast.show();
} catch (SQLException e) {
Toast toast = Toast.makeText(context, "" + e, Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Toast toast = Toast.makeText(context, "onUpgrade called", Toast.LENGTH_LONG);
toast.show();
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e) {
Toast toast = Toast.makeText(context, "" + e, Toast.LENGTH_LONG);
toast.show();
}
}
}
ваши ответы будут очень полезны для меня, спасибо
EDIT:
класс DataBean :
public class DataBean {
//private variables
int _id;
String _name;
String _card_value;
String _card_code;
// Empty constructor
public DataBean(){
}
// constructor
public DataBean(int id, String name, String _card_value, String _card_code){
this._id = id;
this._name = name;
this._card_value = _card_value;
this._card_code = _card_code;
}
// constructor
public DataBean(String name, String _card_value, String _card_code){
this._name = name;
this._card_value = _card_value;
this._card_code = _card_code;
}
// getting ID
public int getID(){
return this._id;
}
// setting id
public void setID(int id){
this._id = id;
}
// getting name
public String getName(){
return this._name;
}
// setting name
public void setName(String name){
this._name = name;
}
// getting CardValue
public String getCardValue(){
return this._card_value;
}
// setting CardValue
public void setCardValue(String _card_value){
this._card_value = _card_value;
}
// getting CardCode
public String getCardCode(){
return this._card_code;
}
// setting CardCode
public void setCardCode(String _card_code){
this._card_code = _card_code;
}
}
эти строки я добавляю в DataBaseAdapter:
public DataBean getDat(String name){
DataBean bean=null;
SQLiteDatabase db=this.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME+" = '"+name+"'", null, null, null, null);
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int id = cursor.getInt(index);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
bean = new DataBean(id, name, card, code);
}
return bean;
}
public List<DataBean> gelAllDat(){
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db=this.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns,DataBaseHelper.NAME, null, null, null, null);
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int cid = cursor.getInt(index);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
DataBean bean = new DataBean(cid, name, card, code);
list.add(bean);
}
return list;
}
и последний вопрос? Мне нужно изменить мой вставить данные на DataBaseAdapter?
EDIT 2:
Я добавил этот код в свой DataBaseAdapter:
public List<DataBean> getAllCards(){
List<DataBean> list=new ArrayList<>();
String query = "SELECT * FROM " + DataBaseHelper.TABLE_NAME;
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
while (cursor.moveToNext()) {
//int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
//int cid = cursor.getInt(index);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
DataBean bean = new DataBean(name, card, code);
list.add(bean);
}
return list;
}
public DataBean getData(String name) {
//select _id,Name,Card,Code
SQLiteDatabase db = helper.getReadableDatabase();
String[] columns = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE};
DataBean bean=null;
Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, DataBaseHelper.NAME + " = '" + name + "'", null, null, null, null);
StringBuffer buffer = new StringBuffer();
while (cursor.moveToNext()) {
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
//buffer.append(name + " " + card + " " + code + "n");
bean = new DataBean( name,card, code);
}
return bean;
}
1 ответов
вы можете начать с Боба, чтобы содержать и моделировать информацию и сделать его более простым в реализации.
public class DataBean{
protected int id;
protected String name;
protected String card;
protected String code;
//Setter, Getters and constructor
...
}
С созданным DataBean вы можете изменить возвращаемые типы ваших методов на DataBean или список и заполнить внутри каждого метода вместо того, чтобы возвращать строку со всеми полями.
public DataBean getData(String name){
...
DataBean bean = null;
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int id = cursor.getInt(index);
String personName = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
bean = new DataBean(id, name, card, code);
}
return bean;
}
public List<DataBean> getAllData() {
List<DataBean> list = new ArrayList<>();
...
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex(DataBaseHelper.UID);
int index2 = cursor.getColumnIndex(DataBaseHelper.NAME);
int index3 = cursor.getColumnIndex(DataBaseHelper.CARD);
int index4 = cursor.getColumnIndex(DataBaseHelper.CODE);
int cid = cursor.getInt(index);
String name = cursor.getString(index2);
String card = cursor.getString(index3);
String code = cursor.getString(index4);
DataBean bean = new DataBean(cid, name, card, code);
list.add(bean);
}
return list;
}
теперь, когда вы вызываете свои методы, у вас есть объект(ы) DataBean, теперь вам нужно написать свой адаптер, чтобы показать информацию в RecyclerView.
сначала нужно связать и настроить RecyclerView в вашей деятельности.
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(new DataBeanAdapter(dbAdapter.getAllData(), R.layout.item));
после вам нужно создать DataBeanAdapter и ViewHolder.
public class DataBeanAdapter extends RecyclerView.Adapter<DataBeanAdapter.ViewHolder>{
private List<DataBean> items;
private int itemLayout;
public DataBeanAdapter(List<DataBean> items, int itemLayout){
this.items = items;
this.itemLayout = itemLayout;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
DataBean item = items.get(position);
holder.name.setText(item.getName());
holder.card.setText(item.getCard());
//All the thing you gonna show in the item
}
@Override
public int getItemCount() {
return items.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public TextView card;
public ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
card = (TextView) itemView.findViewById(R.id.card);
}
}
}
идентификатор, макет и атрибуты держателя представления в зависимости от того, кого вы собираетесь показать на элемент в RecyclerView.