web-dev-qa-db-ja.com

RecyclerViewでSQLiteデータを表示する

私はよく検索しますが、RecyclerViewでSQLiteデータを表示する方法についてのステップバイステップガイドは見つかりませんでした。誰かが私にこれを行う方法を説明できますか?

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

    }
}

あなたの答えは私にとって本当に役に立ちます、ありがとう

編集:

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

Beanから始めて、情報を格納およびモデル化し、実装をより簡単にすることができます。

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のアイテムごとに表示するユーザーに応じて、ViewHolderのID、レイアウト、および属性。

9
f3rn4nd000