2

次のコードで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;

    }

次の方法で、このリストの項目を文字列値と比較したいと思います。

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

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

        return false;
    }

しかし、これらのリスト項目を文字列値と比較する方法はよくわかりません。forループを試してみましたが、リストはすべての要素を通過する.length()メソッドをサポートしていませんか?Tnx!

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
   }
}

あなたが望むかもしれequalsIgnoreCase()ない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

大文字と小文字を区別する文字列の問題を回避するには

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

これまでのところ良い答え。これは、完全を期すための「別の方法」ソリューションの1つです。

セットの使用を考えることができます。

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

次に、

if (playerNames.contains(newPlayer)){}

そうすれば、実行時に意味があれば、セットの大文字と小文字の区別を簡単に制御することもできます。

[編集]

そうは言っても、あなたの質問は「プレーヤーを作成、削除、変更できるアプリを設計する正しい方法は何ですか?その詳細はSQLiteデータベースに保存されていますか?」でした。あなたはその質問をしませんでしたが、その質問はこの質問の前に尋ねられるべきだったので、とにかく答えます。

「ソフトウェアデザインパターン」、特にMVC(Model View Controller)をグーグルで検索してください。MVCは、多くのAndroidアプリで使用される標準パターンです。モデルは、(プレーヤー)で操作したい実世界のデータです。ビューは、アプリ、ListViews、TextViewsなどのインターフェースです。コントローラー(Javaアダプター)は、2つをバインドし、データがUIに配信される方法と、変更がデータに戻される方法を制御するものです。

現時点では、身長約3インチの小さな男が左肩に立って、「持っているものを見せてください。これが私の携帯電話でできるだけ早く実行されるのを見たいです。それを実行してください。後でバグを見つけてください。」彼はまた非常にシャイで無視するのが難しいです。

よく見ると、右肩に別の小さな男が「最初にデザインを正しくしてから、アプリの作成を開始します。最終結果が良くなるので、しばらく待ってもかまいません」と言っているのがわかります。この男ははるかに静かな声で話し、しばしばあまり積極的ではありません。

あなたの仕事は、左側の男に火をつけて逃げ出し、ベンアンドジェリーズのフィッシュフードアイスクリームを右側の男に与えて、彼がぶらぶらしてあなたにもっと良いアドバイスを与えるようにすることです。

それでは、しばらくの間、右側の人の話を聞いてみましょう。

「マティアス、これにアプローチする方法はたくさんありますが、学習しながら、一般的なアプローチに固執しましょう。これにより、Googleは、つなぎ合わせるために必要な個々のコンポーネントを簡単に見つけることができます。

プレーヤーに関するデータを保持するPlayersテーブルを含むデータベースがすでにあります。プレーヤーを表すクラスをコードに作成しましょう。

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

これで、アプリを起動するときに、テーブルからアプリにデータを読み込んで、アプリの操作を開始できます。アダプターを使ってみませんか?次に、カーソルを使用してデータベースにクエリを実行し、アダプター(SimpleCursorAdapterなど)を作成して、最後にアダプターをListViewにバインドできます。後で、onClickListenerとonLongClickListenerを追加して、ユーザーがリスト内のプレーヤーをクリックしたときに何かを実行できます。

これらすべての利点は、コードが間違いなく、最終的にはより短い時間でアプリを作成できるようになることです。読みやすくなります。バグが少なくなり、おそらく最も重要なこととして、変更が容易になります。

ある時点で、通常は途中で、プレーヤーに関するデータを少し追加したいと思うことはほぼ保証できます。たぶん、彼らがプレイした回数、または彼らが青い目をしていること。MVC設計では、これらの種類の変更は、新しいデータに対応するために変更する必要のあるArrayListやループを探すコードを掘り下げるよりもはるかに簡単で、新しいバグを作成する可能性が低くなります。

もちろん、アプリの準備が整うまでにはもっと時間がかかりますが、その過程で学んだことは、このアプリや将来行う他のアプリへの投資を何度も回収することになります。」

右側の人の話を聞いてください。彼は感覚を話します。

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

幸運を。

于 2012-11-15T12:09:54.427 に答える