1

ここで大きな問題が発生しました。すべてのクエリ関数を処理するデータベース ヘルパー クラスを作成します。今、データベースから列のすべての値をロードする関数を作成しようとしていますが、その方法がわかりません。参考までに、データベース テーブル内に 3 つの列を取得しました。これまでの私のコードは次のとおりです。

(更新、機能し、値が得られます)

public List<Content> getSearchKeys() {
    List<Content> contentList = new ArrayList<Content>();
    // The query
    String selectQuery = "SELECT  * FROM " + TABLE_SEARCH;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // I use do.. while here and it works now, should I better use for loop?
    if (cursor.moveToFirst()) {
        do {
            Content content = new Content();
            content.setID(Integer.parseInt(cursor.getString(0)));
            content.setsKeys(cursor.getString(1));
            content.setAct(cursor.getString(2));
            // Adding content to list
            contentList.add(content);
        } while (cursor.moveToNext());
    }
    // return content list
    return contentList;
}

問題は、上記の関数の結果を String[] に渡す方法ですか? 私のアクティビティでは、次のように使用しようとしましたが、機能しません:

(更新しました)

...
setContentView(R.layout.page_search);

    DatabaseHandler db = new DatabaseHandler(this);
    List<Content> contents = db.getAllContacts(); 
    final String[] searchQ = new String[contents.size()];
    int i =0;

      for (Content cn : contents) {
            searchQ[i] = cn.getsKeys().toString(); 
      }

      final String[] SearchQueries = searchQ;

上記のコードにコメントを付けて、次のように文字列配列に変更すると、機能します。

static final String[] SearchQueries = new String[] { "iPhone", "Mac", "Apple",};

私の目的は、上記の配列をデータベースから取得した配列に置き換えることです。では、何が問題で、これを処理する正しい方法は何ですか? 助けてくれて本当にありがとうございます。

4

1 に答える 1

1

問題1:カーソルが空であるがnullでない場合、do whileループは失敗します(whileループに変更してください)

問題2:文字列に変換するには、クラスにtoStringメソッドが必要です。Content次に、ループを作成します。

String[] queryAsStrings = new String[query.size()];
int i = 0;
for (Content c : query) {
  queryAsStrings[i] = c.toString();
}
于 2012-11-08T14:10:43.570 に答える