2

ContentProvider を実装していますが、クエリ メソッドを実装すると、いくつかの問題に直面します。

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

引数のキーと値のペアを取得するにはどうすればよいですか?

ユーザーが「a=? and b=?」のようなものを渡すとします。そして 2,"hello" を selectionArgs として、HashMap {a:2,b:"hello"} を取得したいと考えています。

4

1 に答える 1

5

これは、探しているものの解決策を示すプログラムです。getHashmap()選択文字列と選択引数を引数として取り、探しているもののハッシュマップを返すメソッドをよく見てください。あなたのデータセットを例として使用しました。探しているものによっては、ソリューションに一歩近づくはずです。唯一の注意点は、「=」に加えて別の論理比較を使用する場合は、正規表現を変更する必要があることです。それがあなたにとってうまくいくかどうか教えてください

    public static void main(String[] args) {
        String sel = "a=? and b=?";
    String[] ags = new String[] { "2", "hello" };
        HashMap<String, String> result = getHashmap(sel, ags);

    Iterator it = result.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry) it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
        it.remove();
    }

}

public static HashMap<String, String> getHashmap(String selection,
        String[] selectionArgs) {
        HashMap<String, String> result = new HashMap<String, String>();

    Pattern pattern = Pattern.compile("[a-z]*(\\s)*=\\?",
    Pattern.CASE_INSENSITIVE);

    Matcher matcher = pattern.matcher(selection);

    int pos = 0;
    while (matcher.find()) {
        String[] selParts = matcher.group(0).split("=");
        result.put(selParts[0], selectionArgs[pos]);
    pos++;
    }

    return result;
}
于 2012-10-18T08:43:21.520 に答える