【问题标题】:Using a rawQuery in a new activity with data passed from previous activity ListView在新活动中使用 rawQuery 以及从先前活动 ListView 传递的数据
【发布时间】:2012-02-25 19:10:23
【问题描述】:

我的场景:

我在显示城市名称列表的活动中填充 ListView。当我选择一个城市名称时,我将启动一个新活动,该活动将在 TextView 标题中显示城市名称。这是完美的工作,在我的新活动中使用“getIntent”调用。

然后我想在我的新活动中填充另一个 ListView,列出城市中的所有街道。

这是我的问题。在我的数据库中,我有一个我在第一次活动中调用的城市名称表。此表中表示城市名称的字段包含空格(例如,旧金山)。

我的想法是将这些数据传递给新活动,然后将结果打包到一个新的 rawQuery 命令中,以查询另一个数据库表中存在的街道名称,该数据库表将包含特定城市的所有街道。问题是表名不能包含空格(所以我的表名为 SanFrancisco)。没关系,除了我不想在我的第一个活动中显示“旧金山”,我想显示“旧金山”。

解决方案是否会在我的城市列表表中创建另一个字段,该字段将包含城市单词的非空格版本,并将其也传递给新活动?如果是这样,考虑到我没有在我的初始 ListView 中显示它,我该怎么做?

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    ADK, 您不想为每个城市创建单独的表。您只需要 2 张桌子,您可以根据需要添加任意数量的城市和街道,如果您想继续传递完整的城市名称,您甚至可以使用空格。

    您只需要 2 个表格:“City”和“Street”。

    CREATE TABLE City (_id INTEGER PRIMARY KEY, city_name TEXT);
    INSERT INTO City VALUES(1,'San Francisco');
    INSERT INTO City VALUES(2,'Los Angeles');
    INSERT INTO City VALUES(3,'Munich');
    
    CREATE TABLE Street (_id INTEGER PRIMARY KEY, city_id INTEGER, street_name TEXT);
    INSERT INTO Street VALUES(1,1,'Main Street');
    INSERT INTO Street VALUES(2,1,'Haight street');
    INSERT INTO Street VALUES(3,2,'Sunset Blvd');
    INSERT INTO Street VALUES(4,3,'Maximilian Street');
    

    这是要运行的查询:

    select c._id as id, c.city_name as city_name, s.street_name as street_name
    from City c join Street s on c._id=s.city_id
    where c.city_name='San Francisco'
    

    如果您想在有人单击该行时从传递完整城市名称切换到城市的唯一 id,只需将 SQL 语句中的最后一行更改为“where c._id=1”即可。

    使用 Android 内容提供程序进行查询的方法很简单,因此您也应该查看一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多