2

我正在使用以下代码获取数据库值:

public List<String> getPlayerNames() {
        List<String> playerNames = new ArrayList<String>();
        c = myDataBase.rawQuery("SELECT * FROM PLAYERS",null);
        while (c.moveToNext()) {

            String q = c.getString(1);
            playerNames.add(q);

        }
        c.close();
        myDataBase.close();
        return playerNames;

    }

我现在想使用以下方法将此列表中的项目与字符串值进行比较:

private boolean checkIfExists(String newPlayer) {
        // TODO Auto-generated method stub

        List<String> playerNames = myDbHelper.getPlayerNames();
        //here a loop?! 

        return false;
    }

但我真的不知道如何将这些列表项与字符串值进行比较。我尝试使用 for 循环,但又一次,列表不支持 .length() 方法来遍历所有元素?天呐!

4

5 回答 5

3
for(String playerName : playerNames){
  if(playerName.equals(newPlayer)){
    return true;
  }
}
return false;
于 2012-11-15T11:49:59.457 回答
2
for (String playerName : playerNames) {
   if (playerName.equals(newPlayer)) {
       // do something
   }
}

you might want equalsIgnoreCase() rather than equals()

于 2012-11-15T11:50:57.940 回答
2

是的,会有一个像下面这样的循环

for(String str : players)
{
    if (str.equalsIgnoreCase(newPlayer))
    { 
      return true; 
    } 
}
return false;
于 2012-11-15T11:51:54.900 回答
1

到目前为止很好的答案。这是完整性的“另一种方式”解决方案之一。

您可以考虑使用 Set。

public Set<String> getPlayerNames() {
    TreeSet<String> playerNames = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); 

然后使用

if (playerNames.contains(newPlayer)){}

然后,即使在运行时也可以轻松控制集合的大小写敏感度,如果它有意义的话。

[编辑]

也就是说,您的问题可能是“设计一个让我创建、删除和修改播放器的应用程序的正确方法是什么,其详细信息存储在 SQLite 数据库中?”。你没有问那个问题,但我还是会回答这个问题,因为这个问题应该在这个问题之前提出。

花一些时间在谷歌上搜索“软件设计模式”,尤其是 MVC(模型视图控制器)。MVC 是许多 Android 应用程序中使用的标准模式。模型是您想要使用的真实世界数据(玩家)。View(s) 是您的应用程序、ListViews、TextViews 等的接口。控制器(Java 适配器)是将两者绑定在一起并控制如何将数据传递到您的 UI 以及如何对数据进行更改。

此刻,你有一个大约 3 英寸高的小家伙站在你的左肩上说:“给我看看你有什么。我想尽快看到这个在我的手机上运行。完成它并稍后找出错误”。他也很吵闹,难以忽视。

如果你仔细观察,你会看到另一个小家伙在你的右肩上说“先把设计做好。然后开始构建应用程序。我不介意等一会儿,因为最终结果会更好”。这个人说话的声音要小得多,而且通常不是很自信。

你的工作是向左边的人放火,让他逃跑,然后把 Ben 和 Jerrys 的网络钓鱼冰淇淋喂给右边的人,让他在附近闲逛,给你更多好的建议。

所以让我们听一会儿右边的家伙:

“好吧,马蒂亚斯,有很多方法可以解决这个问题,但在你学习的过程中,让我们坚持使用通用方法。这将使谷歌很容易找到你需要将它们拼接在一起的各个组件。

您已经有了一个包含 Players 表的数据库,其中包含有关 Players 的数据。让我们在代码中创建一个代表玩家的类。

public class Player{
      public int id;
      public String name;
      public Boolean likesPhishFood;
}

现在,当我们启动我们的应用程序时,我们可以将表中的数据加载到我们的应用程序中,以便开始使用它。使用适配器怎么样?然后我们可以使用 Cursor 来查询我们的数据库,我们可以使用它来创建一个适配器,也许是 SimpleCursorAdapter,然后最终将我们的适配器绑定到 ListView。稍后,您可以添加 onClickListener 和 onLongClickListener 以在用户单击列表中的 Player 时执行某些操作。

所有这一切的好处是,毫无疑问,您的代码最终将导致在更短的时间内生成您的应用程序;会更容易阅读;将有更少的错误,也许最重要的是,将更容易改变。

我几乎可以保证,在某个时间点,通常是大约一半,你会想要添加一些关于玩家的数据。也许他们玩过的次数,或者他们有蓝眼睛。使用 MVC 设计,与在代码中寻找 ArrayList 和为适应新数据而需要更改的循环相比,此类更改更容易进行,并且更不容易产生新的错误。

当然,在你的应用程序准备好之前你需要更多的时间,但你将在此过程中学到的东西将多次收回投资——在这个应用程序和你将来使用的其他应用程序中。”

听右边那个人的。他讲道理。

http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

祝你好运。

于 2012-11-15T12:09:54.427 回答
1

To avoid problems with case sensitive strings

for(String playerName : playerNames){
  if(playerName.equalsIgnoreCase(newPlayer)){
    return true;
  }
}
于 2012-11-15T11:51:45.147 回答