2012-01-13 78 views
1

你好我再次(对不起)填充微调,使结果唯一

我很累从sqlitle填充微调,它是工作正常,但我的表如下所示:

_id |名称|时间| ....

_id:始终坚持自制增量一些独特的 名称:是的人名,重复许多线路在此表中

我希望把所有微调从名称此行,但uniq的无重复。 我现在在做什么:

private void updateSpiner(){ Spinner nameSpinner =(Spinner)findViewById(R.id.spinMena);

Cursor nameCursor = db.getNames(); 
    startManagingCursor(nameCursor); 

    String[] from = new String[]{"Name"}; 
    int[] to = new int[]{android.R.id.text1}; 

    SimpleCursorAdapter nameAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, nameCursor, from, to); 
      nameSpinner.setAdapter(nameAdapter); 
     } 

这里是我得到的数据:

为什么我需要也_id一行对我
public Cursor getNames(){ 
     final String KEY_TITLE = "Name"; 
     final String KEY_ROWID = "_id"; 
     return database.query("plan", new String[] {KEY_ROWID, KEY_TITLE}, null, null, null, null, null); 
    } 

有人可以解释,我现在仍然对Java和我不看看为什么我需要它,除非我不这样做,否则会抱怨没有_id。

但它没有在第一个方法中使用我只从它得到名称......因为_id我不能在查询中使用DISTINCT = true,因为它仍然返回所有行,因为_id对于每一行都是唯一的..

有人可以帮我把头包在里面吗?我不想做单独的表或东西..

感谢, 弗拉德

+0

你需要从你的表不同的名称? – Venky 2012-01-13 14:32:29

回答

1

在我而言,我无法得到与SimpleCursorAdapter,我有什么做的是,而不是使用ArrayAdapter这项工作simplecursoradapter并在查询中删除ID字段后,在查询中添加DISTINCT子句。这里是关于Why _id field required for simplecursor adapter

+0

所以我应该做这样的事情? 当需要将数据附加到适配器时,我喜欢使用表名称别名来将id字段查询为_id。例如:SELECT id _id,来自消息顺序的msg。这样适配器就会看到一个名为_id的字段,每个人都很高兴。 – VladoPortos 2012-01-13 14:42:09

+0

当您使用ArrayAdapter而不是SimpleCursorAdapter时,您不需要_id。您只需将游标数据构造为数组并将该数组传递给适配器(有创建数组的开销,但我们实现了我们想要的)。 – kosa 2012-01-13 14:47:46

+0

我明白了,所以唯一需要改变的就是SimpleCursorAdapter类似于:ArrayAdapter new ArrayAdapter (this,android.R.layout.simple_list_item_1,from);并摆脱SQL请求中的_id? – VladoPortos 2012-01-13 14:53:21

0

的讨论链接在我看来,你的表格不是理想适合微调输入。您需要规范化数据库并创建一个类似nameId | name的新表。然后在“数据”表中,您将拥有dataId | nameId | time | ...。然后,您只需使用新表nameId | name中的数据加载您的微调器。

+0

嗯是的,我担心我将不得不创建另一张桌子。我一回到家就可以尝试。 – VladoPortos 2012-01-13 14:44:01

0

也许你可以在SQLite的查询中使用DISTINCT:SELECT manual