5

Androidで実行される前に、サブクラスが Uri に必要なパラメーターを入力するためのメカニズムとして、 Uri.Builder オブジェクトを渡しています。

問題は、基本クラスが使用して追加するパラメーターの 1 つをbuilder.appendQueryParameter("q",searchPhrase);サブクラスで置き換える必要がappendQueryParameter()あることですが、見つけることができるのは のみで、replace または set メソッドはありません。appendQueryParameter()同じパラメーター名で、パラメーターの別のインスタンスを追加しますが、それを置き換えません。

あきらめて別の方法を試す必要がありますか?または、まだ見つかっていないクエリ パラメータを置き換える方法はありますか?

4

6 に答える 6

17

組み込みのメソッドがないため、私が見つけた最善の方法は、新しい Uri を作成することです。古い Uri のすべてのクエリ パラメーターを繰り返し処理し、目的のキーを新しい値に置き換えます。

private static Uri replaceUriParameter(Uri uri, String key, String newValue) {
    final Set<String> params = uri.getQueryParameterNames();
    final Uri.Builder newUri = uri.buildUpon().clearQuery();
    for (String param : params) {
        newUri.appendQueryParameter(param, 
            param.equals(key) ? newValue : uri.getQueryParameter(param));
    }

    return newUri.build();
}
于 2015-10-20T12:06:46.827 に答える
0

私は以前に同じ問題を抱えていたので、別の方法に進むことにしました。

ラッパー クラスを作成し、クエリ (たとえばsetQueryParameter(key, value)) をMap(またはArrayMapそのようなもの) に格納します。

次に、ラッパー インスタンスのbuild()メソッドが元BuilderappendQueryParameter()と を処理します。build()

于 2015-03-06T11:29:42.840 に答える