【问题标题】:Android SQLite delete issueAndroid SQLite 删除问题
【发布时间】:2014-03-07 15:24:48
【问题描述】:

我是在 Android 上使用 SQLite 的新手,我一直在努力解决我认为非常简单的设计问题。

我有一个包含数据行的表,第一项是 AUTOINCREMENTED 的 id。我的显示数据库的 arrayadapter 有一个如下所示的 click 方法:(将 id 传递给下一个活动)

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Intent i = new Intent(v.getContext(), InstanceView.class);
            i.putExtra("InstanceSelected",(int)id);
            startActivity(i);   
        }

因此,数组适配器中的 id 将在下一个活动中用于显示有关该数据行的更多信息。当我删除时,我的问题就来了。一旦我删除了表中的一行,从表到数组适配器的索引不再正确。

我的数据库:

String CREATE_SAT_TABLE = "CREATE TABLE sat ( " +
            "id INTEGER PRIMARY KEY autoincrement, " + 
            "name TEXT, "+
            "userid INTEGER")

我的问题是:

有什么更好的方法来做到这一点。我需要能够在数组适配器中显示 SQLite 表,并能够通过单击适配器访问正确的行。鉴于表的 id 和数组适配器不匹配。

【问题讨论】:

  • 1) 如果 ID 很长,为什么要在 Intent 中将其截断为 int?这将使值发生变化。 2)我不明白您所说的 “ID 不再基于 0” 是什么意思 3)定义 “不再有效”
  • 你的意思是表的rowid不是自动分配的吗?就像删除第二行一样,第三行不会自动变为第二行。这是你想要完成的吗?
  • 我不认为将其转换为 int 是一个问题。它在表中仅包含 3 个条目。我的问题是如何从没有连续行 ID 的 SQL 表中填充数组适配器并在单击时访问数据。

标签: android sqlite


【解决方案1】:

假设表中有多个列,您可以在 int.putExtras() 中传递任何其他值。如果您有一个包含 id、name 和 dob 列的表,那么您可以简单地传递名称而不是行。如果存在多个名称相同的问题,那么您可以要求用户输入。

【讨论】:

    【解决方案2】:

    你为什么不为你的行模型创建一个 POJO?

    根据您的表:

    //use getters and setters instead
    public class Sat {
       public int id;
       public String name;
       public int userId;
    
       @Override
       public String toString() { return this.name; } //ListView/GridView item text
    }
    

    现在从数据库中读取填充List&lt;Sat&gt; 的所有表行。 然后你可以使用ArrayAdapter&lt;Sat&gt; 并且当你需要使用他们的位置来获得一个特定的项目时,你可以这样做:

    Sat item = adapter.getItem(position);
    int id = item.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多