在RecyclerView中显示SQLite数据

我search了很多,但是我没有find关于如何在RecyclerView中显示SQLite数据的分步指南。 任何人都可以向我解释我该怎么做?

我的数据库适配器:

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

你的答案对我来说真的很有帮助,谢谢

编辑:

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中更改我的插入数据

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

Related of "在RecyclerView中显示SQLite数据"

您可以从一个Bean开始包含和build模信息,并使其更容易实现。

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

通过创buildDataBean,可以将方法的返回types更改为DataBean或List,并在每个方法内部填充,而不是返回包含所有字段的String。

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

在你需要创buildDataBeanAdapter和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); } } } 

编号,布局和ViewHolder的属性取决于您要在RecyclerView中显示每个项目的人员。