簡體   English   中英

Android-從SQLite獲取數據並在ListView中顯示

[英]Android - Fetch data from SQLite and display in ListView

我正在嘗試從SQLite獲取數據,然后將其顯示在ListView上,我認為我很困惑或誤解了如何正確執行它...我所做的是:

SQLiteSQLite創建InsertTable (此方法正在工作)。

db.execSQL("INSERT INTO T_OFERTA VALUES (1, 1, 'Offer1', 30, '2x1', '30, 10-1-2013', '1-1-2013', 'Descripció del producte pew', 1, 'http://www.canon.es/Images/Android-logo_tcm86-1232684.png')");

2.在我創建的ListFragment :1個ImageView ,3個Strings和1個Integer 這是因為在我的Adapter需要DrawableStringInteger

 ImageView FOTO;
 String Title, percent, data_f;
 Integer Preu;

3.-我做了一個像這樣的游標:

Cursor c;
c = db.rawQuery("Select NOM_OFER,PREU_OFERTA,DATA_F,FOTO, PERCENTDESCOMPTE from T_OFERTA", null);
c.moveToFirst();
if (c != null) {
    do {
        for (int i = 0; i < c.getColumnCount(); i++) {
            Title = c.getString((c.getColumnIndex("NOM_OFER")));
            Preu = c.getColumnIndex("PREU_OFERTA");
            percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE")));
            data_f = c.getString((c.getColumnIndex("DATA_F")));
            FOTO = c.getString((c.getColumnIndex("FOTO"))); // <--- Error because FOTO it's an ImageView....
            Log.e("", "" + c.getString(i));
            Toast.makeText(getActivity(), "Title" + Title + "Preu" + Preu + "Percent" + percent + "Cheese is " + data_f, Toast.LENGTH_LONG).show();
        }
    }while (c.moveToNext());
}
c.close();

現在,我必須將變量的數據放入:

mItems.add(new ListViewItem(resources.getDrawable(R.drawable.zumo_oferta), getString(R.string.pew), getString(R.string.pew_precio), getString(R.string.pew_descuento), getString(R.string.pew_data)));

我的ListViewItem類看起來像:

    public class ListViewItem {
    public final Drawable icon;       // the drawable for the ListView item ImageView
    public final String title;       // the text for the ListView item title
    public final String precio;      // the price for the ListView item
    public final String descuento;   // the price for the discount for the ListView item
    public final String date;        //the date for the sale for the ListView item
     // the text for the ListView item description

    public ListViewItem(Drawable icon, String title, String precio, String descuento, String date) {
        this.icon = icon;
        this.title = title;
        this.precio = precio;
        this.descuento = descuento;
        this.date = date;
    }
}

我的ListViewDemoAdapter看起來像:

  public class ListViewDemoAdapter extends ArrayAdapter<ListViewItem> {

    public ListViewDemoAdapter(Context context, List<ListViewItem> items) {
        super(context, R.layout.listview_item, items);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.listview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
            viewHolder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount);
            viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDatas);
            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        ListViewItem item = getItem(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);
        viewHolder.tvDiscount.setText(item.descuento);
        viewHolder.tvPrice.setText(item.precio);
        viewHolder.tvDate.setText(item.date);

        return convertView;
    }


    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;
        TextView tvDiscount;
        TextView tvPrice;
        TextView tvDate;
    }
}

這樣做是因為我想查看提取是否正確。

TL; DR

我沒有使用任何BaseAdapter ,也沒有使用BitMapAdapter ,並且由於必須使用URL設置為ImageView所以我不知道它是否可以工作,那么我的問題是,我可以通過這種方式來實現嗎目前正在執行此操作,還是我應該創建BitMapAdater而不是Drawable 如果以這種方式執行操作,我將無法使用作為“ FOTO”->圖像獲得的字符串,因為它不是Drawable而是String ...您可以指導我正確執行此操作嗎,之所以做出來是因為這只是一個測試,現在我想用SQLite的數據設置ListView。

如果您不理解我的問題或僅需要更多代碼,請告訴我,我會盡快答復您。

我將更改以下內容:

  1. 為了ListViewItem ,請在檢索它們時創建ListViewItem

     ArrayList myItems = new ArrayList<ListViewItem>(); for (int i = 0; i < c.getColumnCount(); i++) { Title = c.getString((c.getColumnIndex("NOM_OFER"))); Preu = c.getColumnIndex("PREU_OFERTA"); percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE"))); data_f = c.getString((c.getColumnIndex("DATA_F"))); // create and add your items as they are retrieved from the db myItems.add(new ListViewItem(...,Title, Preu, percent, data_f)); ... } ... 

現在,您已經將所有項目從數據庫中取出,可以輕松地將它們傳遞到ListView / adapter

myAdapter = new ListViewDemoAdapter(getActivity(), myItems);
setListAdapter(myAdapter);
  1. 我不會在您的ListViewItem存儲Drawable ,而只是將資源ID存儲為整數:

     int icon = R.drawable.example_icon; 

然后在適配器的getView()方法中處理到實際圖像資源的轉換:

ivIcon.setImageResource(item.icon);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM