recyclerview llenar con android android-sqlite android-recyclerview

android - llenar - Mostrar datos de SQLite en RecyclerView



llenar recyclerview con sqlite (1)

Puede comenzar con un Bean para contener y modelar la información y hacerla más fácil de implementar.

public class DataBean{ protected int id; protected String name; protected String card; protected String code; //Setter, Getters and constructor ... }

Con el DataBean creado, puede cambiar los tipos de devolución de sus métodos a DataBean o a List y rellenarlos dentro de cada método en lugar de devolver un String con todos los campos.

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; }

Ahora cuando llama a sus métodos tiene un objeto DataBean, ahora necesita escribir su Adaptador para mostrar la información en el RecyclerView.

Primero necesita vincular y configurar RecyclerView en su actividad.

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));

Después de necesitar crear el DataBeanAdapter y el 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); } } }

La identificación, el diseño y los atributos de ViewHolder dependen de a quién se mostrará por artículo en RecyclerView.

Busco mucho, pero no encontré ninguna guía paso a paso sobre cómo mostrar datos de SQLite en RecyclerView. ¿Alguien puede explicarme cómo puedo hacer esto?

Mi 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(); } } }

Tus respuestas serán realmente útiles para mí, gracias

EDITAR:

Clase 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; }

}

Estas líneas las agrego a mi 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; }

¿Y la última pregunta? Necesito cambiar mis datos de inserción en DataBaseAdapter ?

EDICION 2:

Agregué este código a mi 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; }