2015-02-03 29 views
7

Ich suche viel, aber ich habe keine Schritt-für-Schritt-Anleitungen zur Anzeige von SQLite-Daten in RecyclerView gefunden. Kann mir jemand erklären, wie ich das machen kann?SQLite-Daten in RecyclerView anzeigen

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

    } 
} 

Ihre Antworten werden für mich sehr hilfreich sein, dank

EDIT:

Databeans-Klasse:

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

}

Diese Zeilen i füge meine 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; 

    } 

Und letzte Frage? Ich muss meine Daten einfügen in DataBaseAdapter?

EDIT 2:

ich diesen Code zu meinem DataBaseAdapter hinzugefügt:

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

In den meisten Ihrer Methoden, die sie verwenden, leckt man "Cursor" -Objekte. Bitte schließen Sie den Cursor, wenn Sie damit fertig sind. Darüber hinaus gibt es in der obigen Auflistung keinen Code, der irgendetwas erzeugen würde, das in irgendeinem 'AdapterView' (z. B. 'ListView') oder' RecyclerView' angezeigt werden könnte. Sie benötigen eine Datenstruktur, die eine Sammlung von Modelldaten darstellt (z. B. "ArrayList" von POJOs, "Cursor"). Sobald Sie das erstellt haben, * dann * kommen Sie hierher zurück, um sich zu erkundigen, wie Sie diese Modelldaten in eine 'RecyclerView'-Datei einfügen, damit wir wissen, wie die Struktur der Modelldaten aussieht. – CommonsWare

+0

Müssen Sie SQLite verwenden?Es hat viel zu viel Standardcode, wenn es nicht zwingend vorgeschrieben ist, überprüfen Sie meine Antwort hier, die beschreibt, wie in nur wenigen Zeilen mit Realm RecyclerView von Datenbank füllen http://stackoverflow.com/questions/26517855/using-the- Recyclerview-mit-einer-Datenbank/33568015 # 33568015 – PirateApp

+0

@PirateApp danke für die Antwort, krank versuchen Sie es! – Ololoking

Antwort

7

Sie können mit einem Bean starten Sie die Informationen und machen es einfach zu implementieren enthalten und zu modellieren. statt Rückkehr ein String mit allen Feldern

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

Mit der Databeans erstellt, können Sie die Rückgabetypen Ihrer Methoden von Databeans oder einer Liste und innerhalb jeder Methode gefüllt ändern.

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

Nun, wenn Sie Ihre Methoden aufrufen, haben Sie eine Databeans Objekt (e), jetzt können Sie Ihre Adapter schreiben müssen, die Informationen in der RecyclerView zu zeigen.

Zuerst müssen Sie den RecyclerView in Ihrer Aktivität verknüpfen und einrichten.

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

Nachdem Sie benötigen die DataBeanAdapter und die ViewHolder erstellen.

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

Die ids, das Layout und die Attribute des ViewHolder abhängig, wer Sie Gonna zeigen pro Element in der RecyclerView.

+0

Dank für Antwort, – Ololoking

+0

, wie ich das richtig verstanden, wo u Punkte gesetzt ich brauche diesen Code zu schreiben ‚SQLiteDatabase db = this.getReadableDatabase(); String [] Spalten = {DataBaseHelper.NAME, DataBaseHelper.CARD, DataBaseHelper.CODE}; Cursor Cursor = db.query (DataBaseHelper.TABLE_NAME, Säulen, DataBaseHelper.NAME + "= ' "+ name +"'", null, null, null, null);‘ – Ololoking

+0

Ja setzen alle anderen Code – f3rn4nd000