在新活动中使用rawQuery,其中包含从先前活动ListView传递的数据

时间:2012-02-25 19:10:23

标签: android sqlite listview

我的情景:

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

你只需要2张桌子:“城市”和“街道”。

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内容提供商进行查询,因此您也应该查看它。