为了账号安全,请及时绑定邮箱和手机立即绑定

获取同一个对象到Android ListView

获取同一个对象到Android ListView

LEATH 2023-10-19 14:54:03
我尝试在 Android 中开发我的第一个应用程序,但遇到了一个错误。我需要从 SQLite 数据库获取对象并在 ListView 中显示它们。这是我的适配器的代码:public class ReminderListAdapter extends ArrayAdapter<Reminder> {private Context mContext;private int mResource;public ReminderListAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Reminder> objects) {    super(context, resource, objects);    mContext = context;    mResource = resource;}@NonNull@Overridepublic View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {    int id = getItem(position).getId();    String name = getItem(position).getName();    String hour = getItem(position).getHour();    String date = getItem(position).getDate();    LayoutInflater inflater = LayoutInflater.from(mContext);    convertView = inflater.inflate(mResource, parent, false);    TextView resId = convertView.findViewById(R.id.textId);    TextView resName = convertView.findViewById(R.id.textName);    TextView resHour = convertView.findViewById(R.id.textHour);    TextView resDate = convertView.findViewById(R.id.textDate);    resId.setText(String.valueOf(id));    resName.setText(name);    resHour.setText(hour);    resDate.setText(date);    return convertView;}这是我需要从数据库发布对象的活动代码:public class EditActivity extends AppCompatActivity {DBHelper dbHelper;SQLiteDatabase database;private ListView listView;private TextView countRem;private String count;ArrayList<Reminder> ReminderList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_edit);    dbHelper = new DBHelper(this);    database = dbHelper.getWritableDatabase();    listView =(ListView) findViewById(R.id.ListOfReminders);    countRem =(TextView) findViewById(R.id.textView);结果,我在列表视图中得到相同的输出。对象1:ID:0,名称:1,小时:2,日期:3。该数据与数据库中的数据不匹配。而且,这个输出适用于每个对象。有什么错误吗?如果这是一个愚蠢的错误,我很抱歉,这是第一个应用程序。
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

cursor.getColumnIndex(...)只返回行的列索引。要获取该列中的值,您有以下几种选择:

  • 如果事先知道数据类型,则可以直接调用cursor. 例如,如果该列DBHelper.KEY_NAME包含String,我们可以直接使用查询该列中的值cursor.getString(cursor.getColumnIndex(DBHelper.KEY_NAME))

  • 如果不这样做,您可以尝试调用cursor.getType(int columnIndex)以获取基础类型,然后根据返回值在游标上调用适当的方法。

简而言之,代码的问题在于您获取的是列索引getColumnIndex) 而不是列getFloatgetIntgetString):

    ...

    int idIndex = cursor.getColumnIndex(DBHelper.KEY_ID);

    int nameIndex = cursor.getColumnIndex(DBHelper.KEY_NAME);

    int hourIndex = cursor.getColumnIndex(DBHelper.KEY_HOUR);

    int dateIndex = cursor.getColumnIndex(DBHelper.KEY_DATE);

    String name = cursor.getString(nameIndex);

    String hour = cursor.getString(hourIndex);

    String date = cursor.getString(dateIndex);

  ...


查看完整回答
反对 回复 2023-10-19
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信