我使用以下代码获取DB值:
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;
}
我现在想用以下方法将此List中的项目与String值进行比较:
private boolean checkIfExists(String newPlayer) {
// TODO Auto-generated method stub
List<String> playerNames = myDbHelper.getPlayerNames();
//here a loop?!
return false;
}
但我真的不知道如何将这些列表项与字符串值进行比较。我尝试使用for循环,但是再一次,列表不支持.length()方法通过所有元素? TNX!
答案 0 :(得分:3)
for(String playerName : playerNames){
if(playerName.equals(newPlayer)){
return true;
}
}
return false;
答案 1 :(得分:2)
for (String playerName : playerNames) {
if (playerName.equals(newPlayer)) {
// do something
}
}
您可能需要equalsIgnoreCase()
而不是equals()
答案 2 :(得分:2)
是的,会有一个如下所示的循环
for(String str : players)
{
if (str.equalsIgnoreCase(newPlayer))
{
return true;
}
}
return false;
答案 3 :(得分:1)
避免区分大小写的字符串出现问题
for(String playerName : playerNames){
if(playerName.equalsIgnoreCase(newPlayer)){
return true;
}
}
答案 4 :(得分:1)
到目前为止答案很好。这是其中一种&#34;另一种做法&#34;完整性的解决方案。
您可以考虑使用Set。
public Set<String> getPlayerNames() {
TreeSet<String> playerNames = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
然后使用
if (playerNames.contains(newPlayer)){}
即使在运行时如果有意义,也很容易控制集合的区分大小写。
[编辑]
那就是说,你的问题可能是&#34;设计一个让我创建,删除和修改玩家的应用程序的正确方法是什么,其详细信息存储在SQLite数据库中?& #34 ;.你没有提出这个问题,但无论如何我都会回答这个问题,因为在这之前应该问过这个问题。
花一些时间用谷歌搜索&#34;软件设计模式&#34;,尤其是MVC(模型视图控制器)。 MVC是许多Android应用程序中使用的标准模式。模型是您想要与之合作的真实世界数据(玩家)。视图是应用程序,ListViews,TextViews等的界面。控制器(Java适配器)是将两者绑定在一起并控制如何将数据传递到UI以及如何将更改返回到数据中的内容。
此刻,你有一个身高约3英寸的小家伙站在你的左肩上说'#34;告诉我你有什么。我希望尽快在手机上看到这种情况。完成它并稍后找出错误&#34;。他也非常狡猾,很难被忽视。
如果你仔细观察,你会看到右肩上的另一个小家伙说&#34;先把设计弄好。然后开始构建应用程序。我不介意等一会儿,因为最终结果会更好&#34;。这个家伙用更安静的声音说话,而且往往不是很自信。
你的工作就是放火焚烧左边的那个人,让他逃跑并喂Ben和Jerrys&#39; Phish Food冰淇淋给右边的那个人,让他四处闲逛,给你更好的建议。
所以让我们听一下右边的那个人:
&#34;马蒂亚斯,有很多方法可以解决这个问题,但在你学习的过程中,让我们坚持使用共同的方法。这样,Google就可以轻松找到拼凑它们所需的各个组件。
您已经拥有一个包含Players表的数据库,该表包含有关玩家的数据。让我们在代码中创建一个代表玩家的类。
public class Player{
public int id;
public String name;
public Boolean likesPhishFood;
}
现在,当我们启动应用程序时,我们可以将表中的数据加载到我们的应用程序中,以便可以开始使用它。如何使用适配器?然后我们可以使用Cursor查询我们可以用来创建适配器的数据库,也许是SimpleCursorAdapter,然后最终将我们的适配器绑定到ListView。稍后,您可以添加onClickListener和onLongClickListener,以便在用户单击列表中的播放器时执行某些操作。
所有这一切的优势在于,您的代码毫无疑问最终会在更短的时间内生成您的应用;会更容易阅读;将会有更少的错误,也许最重要的是,将更容易改变。
我几乎可以保证,在某些时候,通常大约一半,你会想要添加一些关于播放器的数据。也许是他们玩过的次数,或者他们有蓝眼睛。使用MVC设计,这些更改更容易实现,并且不太容易产生新的错误,而不是挖掘代码寻找ArrayLists以及需要更改以适应新数据的循环。
当然,在你的应用程序准备好看之前会花费你更多的时间,但是你在学习过程中学到的东西会多次回报投资 - 在这个应用程序和你将来做的其他应用程序中。 &#34;
听听右边的那个人。他讲的是感觉。
http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html
祝你好运。