【问题标题】:How to getItemID from sqlite with BaseAdapter?如何使用 BaseAdapter 从 sqlite 获取项目 ID?
【发布时间】:2014-04-08 16:16:00
【问题描述】:

我有 sqlite 列是这样定义的:

public final static String S_ID = "_ID"; 
public final static String S_PHOTOPATH = "Photopath";
public final static String S_NAME = "Name"; 
public final static String S_POS = "Pos";
public final static String S_SCORE = "Score"; 
public final static String S_FIXED = "Fixed"; 

我想从一个带有扩展 BaseAdapter 的适配器类的 sqlite 助手类中获取项目ID。这是我的代码:

public class Page1ListAdapter extends BaseAdapter {

    private LayoutInflater adapterInflater;
    public Cursor mCursor;
    TagView tag;

    public Page1ListAdapter(Context context, Cursor cursor) {
        super();
        mCursor = cursor;

        adapterInflater=LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mCursor.getCount();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            tag = new TagView();
            convertView = adapterInflater.inflate(R.layout.page1listview_item, null);
            tag.imgV = (ImageView) convertView.findViewById(R.id.ItemImage); 
            tag.titleV = (TextView) convertView.findViewById(R.id.ItemTitle); 
            tag.descriptionV = (TextView) convertView.findViewById(R.id.ItemText);
            convertView.setTag(tag);
        } else {
            tag = (TagView) convertView.getTag();
        }
        mCursor.moveToPosition(position);
        Bitmap bmp = BitmapFactory.decodeFile(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_PHOTOPATH)));
        BitmapDrawable bmpDrawable = new BitmapDrawable(getActivity().getResources(), bmp);
        tag.imgV.setBackground(bmpDrawable);
        tag.titleV.setText(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_NAME)));         
        tag.descriptionV.setText(mCursor.getString(mCursor.getColumnIndex(DBHelper.S_POS)));

        return convertView;
    }

    @Override
    public Object getItem(int position) {
        return position;            
    }

    @Override
    public long getItemId(int position) {
        Log.i("mCursor.getCount() --->", String.valueOf(mCursor.getCount()));
        mCursor.move(position);     
        long id = mCursor.getLong(0); // <--- error here
        return id; 
    }

    public void setTag (Drawable dwb, String title, String description) {
        tag.imgV.setBackground(dwb);
        tag.titleV.setText(title);
        tag.descriptionV.setText(description);
    }
}

但是,getItemID() 总是得到错误或错误的 ID。

如何使用光标获取 _ID 列值?

提前致谢!

【问题讨论】:

  • 你为什么不使用 SimpleCursorAdapter ?
  • 我需要 BaseAdapter 的 getview() 来自定义列表视图。不熟悉 SimpleCursorAdapter,能不能做同样的事情?
  • 当然,在大多数情况下,您甚至不必重写任何方法

标签: android sqlite listview baseadapter


【解决方案1】:

Cursor.move() 将光标移动相对量。您想要一个绝对位置,请改用moveToPosition()

【讨论】:

    【解决方案2】:

    首先初始化数据库obj,如下所示 SQLiteDatabase db = myDb.getReadableDatabase();

    将你的参数名称放入查询中。但是我插入了它。

    try{
          Cursor cursor=db.query(DB_helper.YourTableName, new String[]          {"_ID","Photopath","Name","Pos","Score","Fixed"}, null,null, null, null, null);     
            if(cursor.getCount()>0){
             cursor.moveToFirst();
             do{
            //cursor.getString(0); Means get String from first column(_ID)          
            USER_ID =cursor.getString(0);
            USERNAME=cursor.getString(3);
            USERTYPE=cursor.getString(5);
            PLANTID =cursor.getString(4);
             }while (cursor.moveToNext());
            cursor.close();                  
               db.close();                 
            }     
    
        }catch(Exception e){
         e.printStackTrace();            
        }
    

    您可以将它的值存储到字符串到数组列表中并在任何地方使用它。

    谢谢

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 2012-06-27
      • 1970-01-01
      • 2020-05-29
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多